library(tibble)
library(readxl)
library(dplyr)
library(gtExtras)
library(ggplot2)
library(plotly)
library(viridis)
library(hrbrthemes)
library(openxlsx)
#data <- readxl::read_xlsx ("BPAs_FDTs_ RAVLTs_EscoreZ.xlsx", sheet = 1)
#install.packages("tibble")
#install.packages("openxlsx")
#setwd("C:/Users/User/Desktop/Analysis in R/NeuroCovid")
getwd()
[1] "C:/Users/felip/Desktop/R/4_analise_"
data <- readxl::read_xlsx ("DADOS_BRUTOS_COVID_LONGA_PREENCHENDO.xlsx")
data <- na.omit(data)
################################## BPA Z-Score Calculating #####################################
# 1º Try
# TENTATIVA DE CRIAĂ‡ĂƒO DE FUNĂ‡ĂƒO
cbind(data)
calcular_z_score <- function(x, media, desvio_padrao) {
if (x >= 21 & x <= 30) {
z_score <- (x - media) / desvio_padrao
return(z_score)
}
}
# 2º Try
# Definir os valores constantes de mĂ©dia e desvio padrĂ£o para cada faixa etĂ¡ria
constantes <- tribble(
~LIMIT_AGE, ~media_constante, ~desvio_padrao_constante,
"18-20", 85.79, 22.53,
"21-30", 87.08, 21.50,
"31-40", 85.48, 22.56,
"41-49", 80.72, 22.85
)
# 3º Try
# COMEÇAR DAQUI -----> DETERMINANDO LIMITES A SEREM APLICADOS
limites_idade <- c(18, 20, 30, 40, 50)
data <- data %>%
mutate(LIMIT_AGE = cut(AGE, breaks = limites_idade, labels =
c("18-20", "21-30", "31-40", "41-50"))) %>%
arrange(AGE)
data
# Calcular o Z-score usando as constantes para cada faixa etĂ¡ria
#BPA_CONC
BPA_CONC_EscoreZ <- data %>%
mutate(BPA_CONC_EscoreZ = case_when(
LIMIT_AGE == "18-20" ~ (BPA_CONC_POINTS - 85.79) / 22.53,
LIMIT_AGE == "21-30" ~ (BPA_CONC_POINTS - 87.08) / 21.50,
LIMIT_AGE == "31-40" ~ (BPA_CONC_POINTS - 85.48) / 22.56,
LIMIT_AGE == "41-50" ~ (BPA_CONC_POINTS - 80.72) / 22.85,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID, AGE,GROUP,EDU_LEVEL, LIMIT_AGE,BPA_CONC_POINTS, BPA_CONC_EscoreZ) %>%
arrange(ID)
BPA_CONC_EscoreZ
#BPA_DIVD
BPA_DIVID_EscoreZ <- data %>%
mutate(BPA_DIVID_EscoreZ = case_when(
LIMIT_AGE == "18-20" ~ (BPA_DIVID_POINTS - 79.42) / 23.49,
LIMIT_AGE == "21-30" ~ (BPA_DIVID_POINTS - 77.19) / 24.42,
LIMIT_AGE == "31-40" ~ (BPA_DIVID_POINTS - 71.28) / 25.33,
LIMIT_AGE == "41-50" ~ (BPA_DIVID_POINTS - 61.22) / 26.53,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,BPA_DIVID_POINTS, BPA_DIVID_EscoreZ) %>%
arrange(ID)
BPA_DIVID_EscoreZ
#BPA_ALTERN
BPA_ALTERN_EscoreZ <- data %>%
mutate(BPA_ALTERN_EscoreZ = case_when(
LIMIT_AGE == "18-20" ~ (BPA_ALTERN_POINTS - 93.21) / 21.76,
LIMIT_AGE == "21-30" ~ (BPA_ALTERN_POINTS - 87.53) / 23.56,
LIMIT_AGE == "31-40" ~ (BPA_ALTERN_POINTS - 82.28) / 24.84,
LIMIT_AGE == "41-50" ~ (BPA_ALTERN_POINTS - 72.70) / 25.80,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,BPA_ALTERN_POINTS, BPA_ALTERN_EscoreZ) %>%
arrange(ID)
BPA_ALTERN_EscoreZ
#BPA_TOTAL
BPA_TOTAL_EscoreZ <- data %>%
mutate(BPA_TOTAL_EscoreZ = case_when(
LIMIT_AGE == "18-20" ~ (BPA_TOTAL - 258.42) / 56.59,
LIMIT_AGE == "21-30" ~ (BPA_TOTAL - 251.79) / 58.61,
LIMIT_AGE == "31-40" ~ (BPA_TOTAL - 239.04) / 62.77,
LIMIT_AGE == "41-50" ~ (BPA_TOTAL - 214.65) / 64.33,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,BPA_TOTAL, BPA_TOTAL_EscoreZ) %>%
arrange(ID)
BPA_TOTAL_EscoreZ
BPAs_EscoreZ <- bind_cols(BPA_CONC_EscoreZ, BPA_DIVID_EscoreZ, BPA_ALTERN_EscoreZ, BPA_TOTAL_EscoreZ) %>%
na.omit()
New names:
• `ID` -> `ID...1`
• `ID` -> `ID...8`
• `ID` -> `ID...11`
• `ID` -> `ID...14`
write.xlsx(BPAs_EscoreZ, file = "BPAs_EscoreZ.xlsx")
################################## FDT Z-Score Calculating #####################################
data <- readxl::read_xlsx ("DADOS_BRUTOS_COVID_LONGA_PREENCHENDO.xlsx")
data <- na.omit(data)
# DETERMINANDO LIMITES A SEREM APLICADOS
limites_idade <- c(18, 19, 34, 50)
# ADICIONANDO COLUNA AO DADO, RELACIONADO AOS LIMITES DESEJADOS
data <- data %>%
mutate(LIMIT_AGE = cut(AGE, breaks = limites_idade, labels =
c("18", "19-34", "35-50"))) %>%
arrange(AGE)
data
#FDT READING
FDT_READING_TIME_Z <- data %>%
mutate(FDT_READING_TIME_Z = case_when(
LIMIT_AGE == "18" ~ (FDT_READING_TIME - 20.4) / 4.1,
LIMIT_AGE == "19-34" ~ (FDT_READING_TIME - 22) / 5.6,
LIMIT_AGE == "35-50" ~ (FDT_READING_TIME - 23.9) / 6.5,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,AGE, EDU_LEVEL,GROUP, LIMIT_AGE,FDT_READING_TIME, FDT_READING_TIME_Z) %>%
arrange(ID)
FDT_READING_TIME_Z
#FDT COUTING
FDT_COUNTING_TIME_Z <- data %>%
mutate(FDT_COUNTING_TIME_Z = case_when(
LIMIT_AGE == "18" ~ (FDT_COUNTING_TIME - 23.8) / 3.5,
LIMIT_AGE == "19-34" ~ (FDT_COUNTING_TIME - 24.2) / 5.2,
LIMIT_AGE == "35-50" ~ (FDT_COUNTING_TIME - 27.1) / 7.2,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,FDT_COUNTING_TIME, FDT_COUNTING_TIME_Z) %>%
arrange(ID)
FDT_COUNTING_TIME_Z
#FDT CHOOSING
FDT_CHOOSING_TIME_Z <- data %>%
mutate(FDT_CHOOSING_TIME_Z = case_when(
LIMIT_AGE == "18" ~ (FDT_CHOOSING_TIME - 34) / 5.9,
LIMIT_AGE == "19-34" ~ (FDT_CHOOSING_TIME - 36.9) / 10,
LIMIT_AGE == "35-50" ~ (FDT_CHOOSING_TIME - 41.7) / 14.5,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,FDT_CHOOSING_TIME, FDT_CHOOSING_TIME_Z) %>%
arrange(ID)
FDT_CHOOSING_TIME_Z
#FDT CHANGING
FDT_CHANGING_TIME_Z <- data %>%
mutate(FDT_CHANGING_TIME_Z = case_when(
LIMIT_AGE == "18" ~ (FDT_CHANGING_TIME - 44.8) / 9.1,
LIMIT_AGE == "19-34" ~ (FDT_CHANGING_TIME - 46) / 13,
LIMIT_AGE == "35-50" ~ (FDT_CHANGING_TIME - 53.6) / 18.4,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,FDT_CHANGING_TIME, FDT_CHANGING_TIME_Z) %>%
arrange(ID)
FDT_CHANGING_TIME_Z
#FDT INHIBITION
FDT_INHIBITION_Z <- data %>%
mutate(FDT_INHIBITION_Z = case_when(
LIMIT_AGE == "18" ~ (FDT_INHIBITION - 13.6) / 4.9,
LIMIT_AGE == "19-34" ~ (FDT_INHIBITION - 14.8) / 8.3,
LIMIT_AGE == "35-50" ~ (FDT_INHIBITION - 17.8) / 12,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,FDT_INHIBITION, FDT_INHIBITION_Z) %>%
arrange(ID)
FDT_INHIBITION_Z
#FDT FLEXBILITY
FDT_FLEXIBILITY_Z <- data %>%
mutate(FDT_FLEXIBILITY_Z = case_when(
LIMIT_AGE == "18" ~ (FDT_FLEXIBILITY - 24.4) / 7.8,
LIMIT_AGE == "19-34" ~ (FDT_FLEXIBILITY - 23.9) / 10.8,
LIMIT_AGE == "35-50" ~ (FDT_FLEXIBILITY - 29.7) / 15.7,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,FDT_FLEXIBILITY, FDT_FLEXIBILITY_Z) %>%
arrange(ID)
FDT_FLEXIBILITY_Z
#BIND COLS E SALVAR
FDT_EscoreZ <- bind_cols(FDT_READING_TIME_Z,FDT_COUNTING_TIME_Z,FDT_CHOOSING_TIME_Z,
FDT_CHANGING_TIME_Z,FDT_INHIBITION_Z,FDT_FLEXIBILITY_Z)
New names:
• `ID` -> `ID...1`
• `ID` -> `ID...8`
• `ID` -> `ID...11`
• `ID` -> `ID...14`
• `ID` -> `ID...17`
• `ID` -> `ID...20`
write.xlsx(FDT_EscoreZ, file = "FDT_EscoreZ.xlsx")
################################## RAVLTS Z-Score Calculating #####################################
data <- readxl::read_xlsx ("DADOS_BRUTOS_COVID_LONGA_PREENCHENDO.xlsx")
data <- na.omit(data)
limites_idade <- c(18, 20, 30, 40, 50)
data <- data %>%
mutate(LIMIT_AGE =
cut(AGE, breaks = limites_idade, labels =
c("18-20", "21-30", "31-40", "41-50"))) %>%
arrange(AGE)
data
#RAVLT A1
RAVLT_A1_Z <- data %>%
mutate(RAVLT_A1_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_A1 - 6.8) / 1.7,
LIMIT_AGE == "21-30" ~ (RAVLT_A1 - 6.5) / 1.7,
LIMIT_AGE == "31-40" ~ (RAVLT_A1 - 6.1) / 1.6,
LIMIT_AGE == "41-50" ~ (RAVLT_A1 - 6) / 1.6,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID, AGE,EDU_LEVEL,GROUP, LIMIT_AGE,RAVLT_A1, RAVLT_A1_Z) %>%
arrange(ID)
RAVLT_A1_Z
#RAVLT A2
RAVLT_A2_Z <- data %>%
mutate(RAVLT_A2_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_A2 - 9.5) / 2.2,
LIMIT_AGE == "21-30" ~ (RAVLT_A2 - 8.9) / 2.2,
LIMIT_AGE == "31-40" ~ (RAVLT_A2 - 8.7) / 2,
LIMIT_AGE == "41-50" ~ (RAVLT_A2 - 8.5) / 2,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_A2, RAVLT_A2_Z) %>%
arrange(ID)
RAVLT_A2_Z
#RAVLT A3
RAVLT_A3_Z <- data %>%
mutate(RAVLT_A3_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_A3 - 11) / 2.2,
LIMIT_AGE == "21-30" ~ (RAVLT_A3 - 10.4) / 2.4,
LIMIT_AGE == "31-40" ~ (RAVLT_A3 - 10.3) / 2.1,
LIMIT_AGE == "41-50" ~ (RAVLT_A3 - 9.8) / 2.5,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_A3, RAVLT_A3_Z) %>%
arrange(ID)
RAVLT_A3_Z
#RAVLT A4
RAVLT_A4_Z <- data %>%
mutate(RAVLT_A4_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_A4 - 11.8) / 2.4,
LIMIT_AGE == "21-30" ~ (RAVLT_A4 - 11.4) / 2.4,
LIMIT_AGE == "31-40" ~ (RAVLT_A4 - 11.4) / 2.1,
LIMIT_AGE == "41-50" ~ (RAVLT_A4 - 10.7) / 2.7,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_A4,RAVLT_A4_Z) %>%
arrange(ID)
RAVLT_A4_Z
#RAVLT A5
RAVLT_A5_Z <- data %>%
mutate(RAVLT_A5_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_A5 - 12.2) / 2.4,
LIMIT_AGE == "21-30" ~ (RAVLT_A5 - 12.2) / 2.2,
LIMIT_AGE == "31-40" ~ (RAVLT_A5 - 12.2) / 2.2,
LIMIT_AGE == "41-50" ~ (RAVLT_A5 - 11.7) / 2.6,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_A5, RAVLT_A5_Z) %>%
arrange(ID)
RAVLT_A5_Z
#RAVLT B1
RAVLT_B1_Z <- data %>%
mutate(RAVLT_B1_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_B1 - 6.3) / 1.8,
LIMIT_AGE == "21-30" ~ (RAVLT_B1 - 5.7) / 1.8,
LIMIT_AGE == "31-40" ~ (RAVLT_B1 - 5.3) / 1.6,
LIMIT_AGE == "41-50" ~ (RAVLT_B1 - 4.9) / 1.6,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_B1, RAVLT_B1_Z) %>%
arrange(ID)
RAVLT_B1_Z
#RAVLT A6
RAVLT_A6_Z <- data %>%
mutate(RAVLT_A6_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_A6 - 11.1) / 2.5,
LIMIT_AGE == "21-30" ~ (RAVLT_A6 - 10.9) / 2.6,
LIMIT_AGE == "31-40" ~ (RAVLT_A6 - 10.8) / 2.4,
LIMIT_AGE == "41-50" ~ (RAVLT_A6 - 9.8) / 2.8,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_A6, RAVLT_A6_Z) %>%
arrange(ID)
RAVLT_A6_Z
#RAVLT A7
RAVLT_A7_Z <- data %>%
mutate(RAVLT_A7_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_A7 - 11) / 2.7,
LIMIT_AGE == "21-30" ~ (RAVLT_A7 - 10.7) / 2.7,
LIMIT_AGE == "31-40" ~ (RAVLT_A7 - 10.3) / 2.4,
LIMIT_AGE == "41-50" ~ (RAVLT_A7 - 9.6) / 2.8,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_A7,RAVLT_A7_Z) %>%
arrange(ID)
RAVLT_A7_Z
#RAVLT REC
RAVLT_REC_Z <- data %>%
mutate(RAVLT_REC_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_REC - 10) / 5.7,
LIMIT_AGE == "21-30" ~ (RAVLT_REC - 11.4) / 4.7,
LIMIT_AGE == "31-40" ~ (RAVLT_REC - 11.1) / 4.7,
LIMIT_AGE == "41-50" ~ (RAVLT_REC - 9.9) / 5.6,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_REC,RAVLT_REC_Z) %>%
arrange(ID)
RAVLT_REC_Z
#RAVLT_TOTALSCORE
RAVLT_TOTALSCORE_Z <- data %>%
mutate(RAVLT_TOTALSCORE_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_TOTALSCORE - 51.4) / 8.7,
LIMIT_AGE == "21-30" ~ (RAVLT_TOTALSCORE - 49.3) / 8.6,
LIMIT_AGE == "31-40" ~ (RAVLT_TOTALSCORE - 48.6) / 8,
LIMIT_AGE == "41-50" ~ (RAVLT_TOTALSCORE - 46.7) / 9.6,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_TOTALSCORE, RAVLT_TOTALSCORE_Z) %>%
arrange(ID)
RAVLT_TOTALSCORE_Z
#RAVLT_ALT
RAVLT_ALT_Z <- data %>%
mutate(RAVLT_ALT_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_ALT - 17.3) / 7.3,
LIMIT_AGE == "21-30" ~ (RAVLT_ALT - 16.8) / 6.5,
LIMIT_AGE == "31-40" ~ (RAVLT_ALT - 17.9) / 7,
LIMIT_AGE == "41-50" ~ (RAVLT_ALT - 16.5) / 7.3,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_ALT, RAVLT_ALT_Z) %>%
arrange(ID)
RAVLT_ALT_Z
#RAVLT_RETENTION
RAVLT_RETENTION_Z <- data %>%
mutate(RAVLT_RETENTION_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_RETENTION - 1) / 0.2,
LIMIT_AGE == "21-30" ~ (RAVLT_RETENTION - 1) / 0.27,
LIMIT_AGE == "31-40" ~ (RAVLT_RETENTION - 0.97) / 0.19,
LIMIT_AGE == "41-50" ~ (RAVLT_RETENTION - 1.01) / 0.34,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_RETENTION, RAVLT_RETENTION_Z) %>%
arrange(ID)
RAVLT_RETENTION_Z
#RAVLT_PROAT_INTERFERENCE
RAVLT_PROAT_INTERFERENCE_Z <- data %>%
mutate(RAVLT_PROAT_INTERFERENCE_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_PROAT_INTERFERENCE - 0.96) / 0.33,
LIMIT_AGE == "21-30" ~ (RAVLT_PROAT_INTERFERENCE - 0.92) / 0.37,
LIMIT_AGE == "31-40" ~ (RAVLT_PROAT_INTERFERENCE - 0.91) / 0.33,
LIMIT_AGE == "41-50" ~ (RAVLT_PROAT_INTERFERENCE - 0.86) / 0.31,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_PROAT_INTERFERENCE, RAVLT_PROAT_INTERFERENCE_Z) %>%
arrange(ID)
RAVLT_PROAT_INTERFERENCE_Z
#RAVLT_RETRO_INTERFERENCE
RAVLT_RETRO_INTERFERENCE_Z <- data %>%
mutate(RAVLT_RETRO_INTERFERENCE_Z = case_when(
LIMIT_AGE == "18-20" ~ (RAVLT_RETRO_INTERFERENCE - 0.96) / 0.68,
LIMIT_AGE == "21-30" ~ (RAVLT_RETRO_INTERFERENCE - 0.89) / 0.17,
LIMIT_AGE == "31-40" ~ (RAVLT_RETRO_INTERFERENCE - 0.94) / 0.74,
LIMIT_AGE == "41-50" ~ (RAVLT_RETRO_INTERFERENCE - 0.84) / 0.18,
TRUE ~ NA_real_ # Caso padrĂ£o para outras faixas etĂ¡rias
)) %>%
select(ID,RAVLT_RETRO_INTERFERENCE, RAVLT_RETRO_INTERFERENCE_Z) %>%
arrange(ID)
RAVLT_RETRO_INTERFERENCE_Z
#BIND COLS E SALVAR
RAVLTs_EscoreZ <- bind_cols(RAVLT_A1_Z, RAVLT_A2_Z, RAVLT_A3_Z, RAVLT_A4_Z, RAVLT_A5_Z,
RAVLT_B1_Z, RAVLT_A6_Z, RAVLT_A7_Z, RAVLT_REC_Z, RAVLT_TOTALSCORE_Z,
RAVLT_RETENTION_Z, RAVLT_PROAT_INTERFERENCE_Z, RAVLT_RETRO_INTERFERENCE_Z )
New names:
• `ID` -> `ID...1`
• `ID` -> `ID...8`
• `ID` -> `ID...11`
• `ID` -> `ID...14`
• `ID` -> `ID...17`
• `ID` -> `ID...20`
• `ID` -> `ID...23`
• `ID` -> `ID...26`
• `ID` -> `ID...29`
• `ID` -> `ID...32`
• `ID` -> `ID...35`
• `ID` -> `ID...38`
• `ID` -> `ID...41`
write.xlsx(RAVLTs_EscoreZ, file = "RAVLTs_EscoreZ.xlsx")
library(tibble)
library(readxl)
library(dplyr)
library(gtExtras)
Carregando pacotes exigidos: gt
library(ggplot2)
library(plotly)
Attaching package: ‘plotly’
The following object is masked from ‘package:ggplot2’:
last_plot
The following object is masked from ‘package:stats’:
filter
The following object is masked from ‘package:graphics’:
layout
library(viridis)
Carregando pacotes exigidos: viridisLite
library(hrbrthemes)
#setwd("C:/Users/felip/Desktop/R/3_analise")
getwd()
[1] "C:/Users/felip/Desktop/R/4_analise_"
###################################### Bubble Plots BPAs Zscore ###############################
data <- readxl::read_xlsx ("BPAs_EscoreZ.xlsx", sheet = 1)
summary(data)
ID...1 AGE GROUP EDU_LEVEL LIMIT_AGE BPA_CONC_POINTS
Length:129 Min. :20.00 Length:129 Length:129 Length:129 Min. : 44.0
Class :character 1st Qu.:26.00 Class :character Class :character Class :character 1st Qu.: 80.0
Mode :character Median :32.00 Mode :character Mode :character Mode :character Median : 92.0
Mean :32.94 Mean : 92.2
3rd Qu.:39.00 3rd Qu.:106.0
Max. :50.00 Max. :120.0
BPA_CONC_EscoreZ ID...8 BPA_DIVID_POINTS BPA_DIVID_EscoreZ ID...11 BPA_ALTERN_POINTS
Min. :-2.0037 Length:129 Min. : 26.00 Min. :-1.8505 Length:129 Min. : 50.00
1st Qu.:-0.2828 Class :character 1st Qu.: 71.00 1st Qu.:-0.1295 Class :character 1st Qu.: 87.00
Median : 0.3186 Mode :character Median : 80.00 Median : 0.2789 Mode :character Median : 99.00
Mean : 0.3149 Mean : 80.22 Mean : 0.3289 Mean : 97.36
3rd Qu.: 0.9096 3rd Qu.: 93.00 3rd Qu.: 0.8522 3rd Qu.:110.00
Max. : 1.7190 Max. :116.00 Max. : 1.8387 Max. :120.00
BPA_ALTERN_EscoreZ ID...14 BPA_TOTAL BPA_TOTAL_EscoreZ
Min. :-1.59295 Length:129 Min. :163.0 Min. :-1.514929
1st Qu.: 0.06924 Class :character 1st Qu.:243.0 1st Qu.: 0.003583
Median : 0.67311 Mode :character Median :271.0 Median : 0.525092
Mean : 0.59148 Mean :269.8 Mean : 0.484156
3rd Qu.: 1.20840 3rd Qu.:297.0 3rd Qu.: 1.003027
Max. : 1.83333 Max. :350.0 Max. : 2.103995
colnames(data)
[1] "ID...1" "AGE" "GROUP" "EDU_LEVEL" "LIMIT_AGE"
[6] "BPA_CONC_POINTS" "BPA_CONC_EscoreZ" "ID...8" "BPA_DIVID_POINTS" "BPA_DIVID_EscoreZ"
[11] "ID...11" "BPA_ALTERN_POINTS" "BPA_ALTERN_EscoreZ" "ID...14" "BPA_TOTAL"
[16] "BPA_TOTAL_EscoreZ"
data <- data %>% rename(ID = ID...1) %>% select(-ID...8,-ID...11,-ID...14)
# Filtrando dados BPAs
p1 <- data %>% select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL , AGE, BPA_CONC_POINTS , BPA_CONC_EscoreZ )
p2 <- data %>% select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL, AGE, BPA_DIVID_POINTS , BPA_DIVID_EscoreZ )
p3 <- data %>% select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL ,AGE, BPA_ALTERN_POINTS , BPA_ALTERN_EscoreZ )
ptotal <- data %>% select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL ,AGE, BPA_ALTERN_POINTS , BPA_ALTERN_EscoreZ )
# P1
coresBPA <- c("#1a2887", "#799de4")
p1 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", BPA_CONC_POINTS,
"\nZ-Score: ", BPA_CONC_EscoreZ, sep="")) %>%
ggplot(aes(x = AGE, y = BPA_CONC_EscoreZ, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresBPA) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score Focused Attention", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 18, face = "bold"),
plot.subtitle = element_text(size = 18,face = "bold"),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 15),
legend.position = "",
legend.text = element_text(size = 5)
)
# GrĂ¡fico interativo da bibliotexa ggplottly
pp1 <- ggplotly(p1, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp1
# P2
p2 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", BPA_DIVID_POINTS,
"\nZ-Score: ", BPA_DIVID_EscoreZ, sep="")) %>%
ggplot(aes(x = AGE, y = BPA_DIVID_EscoreZ, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7, position = "jitter") +
scale_fill_manual(values = coresBPA) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score Divid Attention", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 18, face = "bold"),
plot.subtitle = element_text(size = 18,face = "bold"),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 15),
legend.position = "",
legend.text = element_text(size = 5)
)
# GrĂ¡fico interativo da bibliotexa ggplottly
pp2 <- ggplotly(p2, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp2
# P3
p3 <- data %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", BPA_ALTERN_POINTS,
"\nZ-Score: ", BPA_ALTERN_EscoreZ, sep="")) %>%
ggplot(aes(x = AGE, y = BPA_ALTERN_EscoreZ, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresBPA) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score Altern Attention", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 18, face = "bold"),
plot.subtitle = element_text(size = 18,face = "bold"),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 15),
legend.position = "",
legend.text = element_text(size = 5)
)
# GrĂ¡fico interativo da bibliotexa ggplottly
pp3 <- ggplotly(p3, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp3
#BPA_TOTAL
ptotal <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", BPA_TOTAL,
"\nZ-Score: ", BPA_TOTAL_EscoreZ, sep="")) %>%
ggplot(aes(x = AGE, y = BPA_TOTAL_EscoreZ, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresBPA) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score Total", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 18, face = "bold"),
plot.subtitle = element_text(size = 18,face = "bold"),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 15),
legend.position = "",
legend.text = element_text(size = 5)
)
# GrĂ¡fico interativo da bibliotexa ggplottly
pptotal <- ggplotly(ptotal, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pptotal
###################################### Bubble Plots FDTs Zscore ###############################
data <- readxl::read_excel("FDT_EscoreZ.xlsx")
data <- na.omit(data)
colnames(data)
[1] "ID...1" "AGE" "EDU_LEVEL" "GROUP"
[5] "LIMIT_AGE" "FDT_READING_TIME" "FDT_READING_TIME_Z" "ID...8"
[9] "FDT_COUNTING_TIME" "FDT_COUNTING_TIME_Z" "ID...11" "FDT_CHOOSING_TIME"
[13] "FDT_CHOOSING_TIME_Z" "ID...14" "FDT_CHANGING_TIME" "FDT_CHANGING_TIME_Z"
[17] "ID...17" "FDT_INHIBITION" "FDT_INHIBITION_Z" "ID...20"
[21] "FDT_FLEXIBILITY" "FDT_FLEXIBILITY_Z"
data <- data %>% rename(ID = ID...1)
data
# Filtrando FDTs
p4 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_READING_TIME , FDT_READING_TIME_Z )
p5 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_COUNTING_TIME , FDT_COUNTING_TIME_Z )
p6 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_CHOOSING_TIME , FDT_CHOOSING_TIME_Z )
p7 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_CHANGING_TIME , FDT_CHANGING_TIME_Z )
p8 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_INHIBITION , FDT_INHIBITION_Z )
p9 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_FLEXIBILITY , FDT_FLEXIBILITY_Z )
# P4
coresFDT <- c("#f6a3ab", "#1ab6ac")
p4 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_READING_TIME,
"\nZ-Score: ", FDT_READING_TIME_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_READING_TIME_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Reading Time", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp4 <- ggplotly(p4, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp4
# P5
p5 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_COUNTING_TIME,
"\nZ-Score: ", FDT_COUNTING_TIME_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_COUNTING_TIME_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Counting Time", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp5 <- ggplotly(p5, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp5
# P6
p6 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_CHOOSING_TIME,
"\nZ-Score: ", FDT_CHOOSING_TIME_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_CHOOSING_TIME_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Chossing Time", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp6 <- ggplotly(p6, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp6
# P7
p7<- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_CHANGING_TIME,
"\nZ-Score: ", FDT_CHANGING_TIME_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_CHANGING_TIME_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Changing Time", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp7 <- ggplotly(p7, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp7
# P8
p8<- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_INHIBITION,
"\nZ-Score: ", FDT_INHIBITION_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_INHIBITION_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Inbition", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp8 <- ggplotly(p8, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp8
# P9
p9<- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_FLEXIBILITY,
"\nZ-Score: ", FDT_FLEXIBILITY_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_FLEXIBILITY_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Flexibility", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp9 <- ggplotly(p9, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp9
###################################### Bubble Plots RAVLTs Zscore ###############################
data <- readxl::read_xlsx ("RAVLTs_EscoreZ.xlsx")
data
data <- data %>% dplyr::rename(ID = ID...1)
# Filtrando RAVLTs
p10 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A1 , RAVLT_A1_Z )
p11 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A2 , RAVLT_A2_Z )
p12 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A3 , RAVLT_A3_Z )
p13 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A4 , RAVLT_A4_Z )
p14 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A5 , RAVLT_A5_Z )
p15 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_B1 , RAVLT_B1_Z )
p16 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A6 , RAVLT_A6_Z )
p17 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A7 , RAVLT_A7_Z )
p18 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_TOTALSCORE , RAVLT_TOTALSCORE_Z )
p19 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_REC , RAVLT_REC_Z )
p20 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_RETENTION , RAVLT_RETENTION_Z )
p21 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_PROAT_INTERFERENCE , RAVLT_PROAT_INTERFERENCE_Z )
p22 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_RETRO_INTERFERENCE , RAVLT_RETRO_INTERFERENCE_Z )
# P10
coresRAVLT<- c("#7f1c2b", "#9c9ce9")
p10 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A1,
"\nZ-Score: ", RAVLT_A1_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A1_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A1", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp10 <- ggplotly(p10, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp10
# P11
p11 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A2,
"\nZ-Score: ", RAVLT_A2_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A2_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A2", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp11 <- ggplotly(p11, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp11
# P12
p12 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A3,
"\nZ-Score: ", RAVLT_A3_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A3_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A3", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp12 <- ggplotly(p12, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp12
# P13
p13 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A4,
"\nZ-Score: ", RAVLT_A4_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A4_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A4", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp13 <- ggplotly(p13, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp13
# P14
p14 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A5,
"\nZ-Score: ", RAVLT_A5_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A5_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A4", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp14 <- ggplotly(p14, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp14
# P15
p15 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_B1,
"\nZ-Score: ", RAVLT_B1_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_B1_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT B1", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp15 <- ggplotly(p15, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp15
# P16
p16 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A6,
"\nZ-Score: ", RAVLT_A6_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A6_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A6", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp16 <- ggplotly(p16, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp16
# P17
p17 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A7,
"\nZ-Score: ", RAVLT_A7_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A7_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A7", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp17 <- ggplotly(p17, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp17
# P18
p18 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_TOTALSCORE,
"\nZ-Score: ", RAVLT_TOTALSCORE_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_TOTALSCORE_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Total Score", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp18 <- ggplotly(p18, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp18
# P19
p19 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_TOTALSCORE,
"\nZ-Score: ", RAVLT_TOTALSCORE_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_TOTALSCORE_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Total Score", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp19 <- ggplotly(p19, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp19
# P20
p20 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_RETENTION,
"\nZ-Score: ", RAVLT_RETENTION_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_RETENTION_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Retention", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp20 <- ggplotly(p20, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp20
# P21
p21 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_PROAT_INTERFERENCE,
"\nZ-Score: ", RAVLT_PROAT_INTERFERENCE_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_PROAT_INTERFERENCE_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Proative Interference", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp21 <- ggplotly(p21, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp21
# P22
p22 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_RETRO_INTERFERENCE,
"\nZ-Score: ", RAVLT_RETRO_INTERFERENCE_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_RETRO_INTERFERENCE_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7,position = "jitter") +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Retroative Interference", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
pp22 <- ggplotly(p22, tooltip="text") %>%
layout(legend = list(x = 0, y = 1.01,
title = " ",
bgcolor = "#ecf0f1",
bordercolor = "white",
borderwidth = 1,
font = list(size = 9, family = "Arial", color = "black"),
orientation = 50,
tracegroupgap = 20,
traceorder = "normal"
))
pp22
NA
NA
#install.packages('reshape2')
library(ggplot2)
library(dplyr)
library(readxl)
library(reshape2)
getwd()
[1] "C:/Users/felip/Desktop/R/4_analise_"
df <- read_excel("RAVLTs_EscoreZ.xlsx")
colnames(df)
[1] "ID...1" "AGE" "EDU_LEVEL" "GROUP"
[5] "LIMIT_AGE" "RAVLT_A1" "RAVLT_A1_Z" "ID...8"
[9] "RAVLT_A2" "RAVLT_A2_Z" "ID...11" "RAVLT_A3"
[13] "RAVLT_A3_Z" "ID...14" "RAVLT_A4" "RAVLT_A4_Z"
[17] "ID...17" "RAVLT_A5" "RAVLT_A5_Z" "ID...20"
[21] "RAVLT_B1" "RAVLT_B1_Z" "ID...23" "RAVLT_A6"
[25] "RAVLT_A6_Z" "ID...26" "RAVLT_A7" "RAVLT_A7_Z"
[29] "ID...29" "RAVLT_REC" "RAVLT_REC_Z" "ID...32"
[33] "RAVLT_TOTALSCORE" "RAVLT_TOTALSCORE_Z" "ID...35" "RAVLT_RETENTION"
[37] "RAVLT_RETENTION_Z" "ID...38" "RAVLT_PROAT_INTERFERENCE" "RAVLT_PROAT_INTERFERENCE_Z"
[41] "ID...41" "RAVLT_RETRO_INTERFERENCE" "RAVLT_RETRO_INTERFERENCE_Z"
#1a2887, #799de4
###################################### Curva de Crescimento ##########################################
df.RAVLTs <- df %>% select(GROUP,AGE,RAVLT_A1,RAVLT_A2,RAVLT_A3,RAVLT_A4,RAVLT_A5)
df.melted <- melt(df.RAVLTs, id.vars = c("AGE", "GROUP"), variable.name = "VariĂ¡vel", value.name = "PontuaĂ§Ă£o")
cores <- c("CASE" = "#1a2887", "CONTROL" = "#799de4")
# Criar o grĂ¡fico de linhas
p <- ggplot(df.melted, aes(x = AGE, y = PontuaĂ§Ă£o, color = GROUP)) +
geom_point(alpha=0.5, position = "jitter", size = 1.5) +
stat_smooth( method = "lm", span = 0.8, se = F)+
labs(title = "GrĂ¡fico de Linhas RAVLT por Grupo",
x = "AGE",
y = "PontuaĂ§Ă£o RAVLT",
color = "Grupos") +
scale_color_manual(values = cores) +
facet_wrap(~ VariĂ¡vel, scales = "free_y", nrow = 1) + # SeparaĂ§Ă£o por GROUP (caso e controle)
theme_minimal()
p
`geom_smooth()` using formula = 'y ~ x'

shapiro.test(df.RAVLTs$RAVLT_A5)
Shapiro-Wilk normality test
data: df.RAVLTs$RAVLT_A5
W = 0.95843, p-value = 0.0005649


LS0tDQp0aXRsZTogIkFuw6FsaXNlIENvbXBsZXRhIGRvcyBEYWRvcyBOZXVyb2NvZ25pdGl2b3MiDQphdXRob3I6ICJSb2RvbHBobyBDb3J0ZXosIEZlbGlwZSBGYWd1bmRlcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KZGF0ZTogIjIwMjQtMDUtMDYiDQotLS0NCg0KYGBge3IgQm94LXBsb3RzIH0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBtZXNzYWdlPUZBTFNFLCANCiAgd2FybmluZz1GQUxTRSwNCiAgZmlnLmNhcD0gIkJveCBQbG90cyBUZXN0LVQiKQ0KDQoNCiNpbnN0YWxsLnBhY2thZ2VzKCJnZ3RleHQiKQ0KDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShnZ3B1YnIpDQpsaWJyYXJ5KGdndGV4dCkNCg0KDQpnZXR3ZCgpDQoNCmxpc3QuZmlsZXMoKQ0KDQpkYXRhIDwtIHJlYWR4bDo6cmVhZF9leGNlbCgiREFET1NfQlJVVE9TX0NPVklEX0xPTkdBX1BSRUVOQ0hFTkRPLnhsc3giKQ0KDQpkYXRhIDwtIG5hLm9taXQoZGF0YSkNCg0KZGF0YQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgVGVzdC5UIEJQQXMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnAxIDwtIGRhdGEgJT4lICBzZWxlY3QoR1JPVVAgLCBCUEFfQ09OQ19QT0lOVFMsQlBBX0RJVklEX1BPSU5UUywgQlBBX0FMVEVSTl9QT0lOVFMgKQ0KDQoNCiAgICAgIyBSZW9yZ2FuaXphciBvcyBkYWRvcyBwYXJhIG8gZm9ybWF0byAnbG9uZycgdXNhbmRvIGEgZnVuw6fDo28gcGl2b3RfbG9uZ2VyKCkgZG8gcGFjb3RlIHRpZHlyDQoNCnAxX2xvbmcgPC0gdGlkeXI6OnBpdm90X2xvbmdlcihwMSwgY29scyA9IC1HUk9VUCwgbmFtZXNfdG8gPSAiVmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAiVmFsdWUiKQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNHcsOhZmljbyBmYWNldGFkbyBCUEEtQ29uYyxEaXZpZCxBbHRlcm4uDQoNCnBsb3QxIDwtIGdncGxvdChwMV9sb25nLCBhZXMoeCA9IEdST1VQLCB5ID0gVmFsdWUsIGZpbGwgPSBHUk9VUCkpICsgDQogICAgICAgIA0KICBnZW9tX2JveHBsb3Qob3V0bGllci5zaGFwZSA9IE5BLCBhbHBoYSA9IDAuNSwgd2lkdGggPSAwLjcsIGNvZWYgPSAwLCBsd2QgPSAwLjQsIGNvbG9yID0gImJsYWNrIikgKw0KICBnZW9tX2ppdHRlcihhZXMoY29sb3IgPSBHUk9VUCksIHNpemUgPSAyLjUsIHdpZHRoID0gMC4xNSwgYWxwaGEgPSAwLjUpICsNCiAgDQogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMKSArIA0KICANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsgIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsNCiAgDQogIGZhY2V0X3dyYXAofiBWYXJpYWJsZSwgc2NhbGVzID0gImZyZWVfeSIsIA0KICAgICAgICAgICAgIGxhYmVsbGVyID0gbGFiZWxsZXIoVmFyaWFibGUgPSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyhCUEFfQ09OQ19QT0lOVFMgPSAiQ29uYyBQb2ludHMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJQQV9ESVZJRF9QT0lOVFMgPSAiRGl2aWQgUG9pbnRzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUEFfQUxURVJOX1BPSU5UUyA9ICJBbHRlcm4gUG9pbnRzIikpKSArDQogIA0KICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygyMCwgMTMwKSwgYnJlYWtzID0gc2VxKDIwLCAxMjAsIGJ5ID0gMjApKSArDQogIA0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNSwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogICAgICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgIGZhY2UgPSAiYm9sZCIpKQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICBUZXN0LVQNCg0KcGxvdDEgPC0gcGxvdDEgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIGxhYmVsLnggPSAxLjM4KQ0KDQpwbG90MQ0KDQpnZ3NhdmUoImJ4cGxvdF9CUEFzLnBkZiIsIHBsb3QgPSBwbG90MSwgd2lkdGggPSAxMywgaGVpZ2h0ID0gMTApDQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjQlBBIFRvdGFsDQoNCnB0b3RhbCA8LSBkYXRhICU+JSAgc2VsZWN0KEdST1VQICxCUEFfVE9UQUwpDQoNCiMgUmVvcmdhbml6YXIgb3MgZGFkb3MgcGFyYSBvIGZvcm1hdG8gJ2xvbmcnIHVzYW5kbyBhIGZ1bsOnw6NvIHBpdm90X2xvbmdlcigpIGRvIHBhY290ZSB0aWR5cg0KDQojcF9icGE8LSB0aWR5cjo6cGl2b3RfbG9uZ2VyKHB0b3RhbCwgY29scyA9IC1HUk9VUCwgbmFtZXNfdG8gPSAiVmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAiVmFsdWUiKQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KcGxvdG90YWwgPC0gZ2dwbG90KHB0b3RhbCwgYWVzKHggPSBHUk9VUCwgeSA9IEJQQV9UT1RBTCwgZmlsbCA9IEdST1VQKSkgKyANCiAgDQogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEsIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNywgY29lZiA9IDAsIGx3ZCA9IDAuNCwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IEdST1VQKSwgc2l6ZSA9IDIuNSwgd2lkdGggPSAwLjE1LCBhbHBoYSA9IDAuNSkgKw0KICANCiAgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwpICsgDQogIGdndGl0bGUoIlRvdGFsIFNjb3JlIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWEyODg3IiwgIiM3OTlkZTQiKSkgKyAgDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWEyODg3IiwgIiM3OTlkZTQiKSkgKw0KICANCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMTAwLCA0MDApLCBicmVha3MgPSBzZXEoMTAwLCA0MDAsIGJ5ID0gNTApKSArDQogIA0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNSwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogICAgICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgIGZhY2UgPSAiYm9sZCIpKQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICBUZXN0LVQNCg0KcGxvdG90YWwgPC0gcGxvdG90YWwgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIGxhYmVsLnggPSAxLjM4KQ0KDQpwbG90b3RhbA0KDQojZ2dzYXZlKCJieHBsb3RfQlBBc1RPVEFMLnBkZiIsIHBsb3QgPSBwbG90b3RhbCwgd2lkdGggPSAxMywgaGVpZ2h0ID0gMTApDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIFRlc3QuVCBGRFRzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoNCmRhdGEgPC0gcmVhZHhsOjpyZWFkX2V4Y2VsKCJEQURPU19CUlVUT1NfQ09WSURfTE9OR0FfUFJFRU5DSEVORE8ueGxzeCIpDQoNCmRhdGEgPC0gbmEub21pdChkYXRhKQ0KDQpkYXRhDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0ZpbHRyYW5kbyBGRFRzDQoNCnAyIDwtIGRhdGEgJT4lICBzZWxlY3QoR1JPVVAgLCBGRFRfUkVBRElOR19USU1FICxGRFRfQ09VTlRJTkdfVElNRSwgRkRUX0NIT09TSU5HX1RJTUUsIEZEVF9DSEFOR0lOR19USU1FLA0KICAgICAgICAgICAgICAgICAgICAgICBGRFRfSU5ISUJJVElPTiwgRkRUX0ZMRVhJQklMSVRZICkNCg0KDQogICAgICMgUmVvcmdhbml6YXIgb3MgZGFkb3MgcGFyYSBvIGZvcm1hdG8gJ2xvbmcnIHVzYW5kbyBhIGZ1bsOnw6NvIHBpdm90X2xvbmdlcigpIGRvIHBhY290ZSB0aWR5cg0KDQpwMl9sb25nIDwtIHRpZHlyOjpwaXZvdF9sb25nZXIocDIsIGNvbHMgPSAtR1JPVVAsIG5hbWVzX3RvID0gIlZhcmlhYmxlIiwgdmFsdWVzX3RvID0gIlZhbHVlIikNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFAyDQoNCnBsb3QyIDwtIGdncGxvdChwMl9sb25nLCBhZXMoeCA9IEdST1VQLCB5ID0gVmFsdWUsIGZpbGwgPSBHUk9VUCkpICsgDQogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEsIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNywgY29lZiA9IDAsIGx3ZCA9IDAuNCwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IEdST1VQKSwgc2l6ZSA9IDEuNSwgd2lkdGggPSAwLjE1LCBhbHBoYSA9IDAuNSkgKw0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsgIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsNCiAgZmFjZXRfd3JhcCh+IFZhcmlhYmxlLCBzY2FsZXMgPSAiZnJlZV95IiwgDQogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihWYXJpYWJsZSA9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKEZEVF9SRUFESU5HX1RJTUUgPSAiUmVhZGluZyBUaW1lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRFRfQ09VTlRJTkdfVElNRSA9ICJDb3VudGluZyBUaW1lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRFRfQ0hPT1NJTkdfVElNRSA9ICJDaG9vc2luZyBUaW1lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRFRfQ0hBTkdJTkdfVElNRSA9ICJDaGFnaW5nIFRpbWUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZEVF9JTkhJQklUSU9OID0gICJJbmhpYml0aW9uIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRUX0ZMRVhJQklMSVRZID0gIkZsZXhpYmlsaXR5IikpKSArDQogICNzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygyMCwgMTMwKSwgYnJlYWtzID0gc2VxKDIwLCAxMDAsIGJ5ID0gMjApKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE5LCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEuNSwgZmFjZSA9ICJib2xkIiksDQogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYW1pbHkgPSAiIiksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIikpDQoNCg0KIyBBanVzdGUgYXMgZXNjYWxhcyBkZSBhY29yZG8gY29tIG8gbcOtbmltbyBlIG3DoXhpbW8gZG9zIGRhZG9zDQojcGxvdDEgPC0gcGxvdDEgKyB5bGltKG1pbihwMV9sb25nJFZhbHVlKSwgbWF4KHAxX2xvbmckVmFsdWUpKQ0KDQpwbG90MiA8LSBwbG90MiArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiApDQogDQpwbG90Mg0KDQpnZ3NhdmUoZmlsZW5hbWUgPSAiRkRUc192YWx1ZXMucGRmIiwgcGxvdCA9IHBsb3QyKQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICAgVGVzdC5UIFJBVkxUcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KDQoNCmRhdGEgPC0gcmVhZHhsOjpyZWFkX2V4Y2VsKCJEQURPU19CUlVUT1NfQ09WSURfTE9OR0FfUFJFRU5DSEVORE8ueGxzeCIpDQoNCmRhdGEgPC0gbmEub21pdChkYXRhKQ0KDQpkYXRhDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0ZpbHRyYW5kbyBSQVZMVHMNCg0KDQpwMyA8LSBkYXRhICU+JSAgc2VsZWN0KEdST1VQICwgUkFWTFRfQTEgLFJBVkxUX0EyLCBSQVZMVF9BMywgUkFWTFRfQTQgICApDQoNCnA0IDwtIGRhdGEgJT4lICBzZWxlY3QoR1JPVVAgLCBSQVZMVF9BNSwgUkFWTFRfQTYsIFJBVkxUX0E3KQ0KDQpwNSA8LSBkYXRhICU+JSAgc2VsZWN0KEdST1VQICwgUkFWTFRfVE9UQUxTQ09SRSkNCg0KcDYgPC0gZGF0YSAlPiUgIHNlbGVjdChHUk9VUCxSQVZMVF9CMSxSQVZMVF9SRUMsUkFWTFRfUkVURU5USU9OKQ0KDQpwNyA8LSBkYXRhICU+JSAgc2VsZWN0KEdST1VQLFJBVkxUX1JFVEVOVElPTixSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UpDQoNCg0KDQogICAgICMgUmVvcmdhbml6YXIgb3MgZGFkb3MgcGFyYSBvIGZvcm1hdG8gJ2xvbmcnIHVzYW5kbyBhIGZ1bsOnw6NvIHBpdm90X2xvbmdlcigpIGRvIHBhY290ZSB0aWR5cg0KDQpwM19sb25nIDwtIHRpZHlyOjpwaXZvdF9sb25nZXIocDMsIGNvbHMgPSAtR1JPVVAsIG5hbWVzX3RvID0gIlZhcmlhYmxlIiwgdmFsdWVzX3RvID0gIlZhbHVlIikNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFAzDQoNCnBsb3QzIDwtIGdncGxvdChwM19sb25nLCBhZXMoeCA9IEdST1VQLCB5ID0gVmFsdWUsIGZpbGwgPSBHUk9VUCkpICsgDQogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEsIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNywgY29lZiA9IDAsIGx3ZCA9IDAuNCwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IEdST1VQKSwgc2l6ZSA9IDEuNSwgd2lkdGggPSAwLjE1LCBhbHBoYSA9IDAuNSkgKw0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsgIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsNCiAgZmFjZXRfd3JhcCh+IFZhcmlhYmxlLCBzY2FsZXMgPSAiZnJlZV95IiwgDQogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihWYXJpYWJsZSA9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKFJBVkxUX0ExID0gIlJBVkxUX0ExIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVZMVF9BMiA9ICIgUkFWTFRfQTIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBVkxUX0EzID0gIlJBVkxUX0EzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVZMVF9BNCA9ICJSQVZMVF9BNCIpKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAyMCkpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMSwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLA0KICAgICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpKQ0KDQoNCg0KcGxvdDMgPC0gcGxvdDMgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIgLCBsYWJlbC55ID0gMTgsIGxhYmVsLnggPSAxLjEpDQoNCnBsb3QzDQoNCiNnZ3NhdmUoZmlsZW5hbWUgPSAiUkFWTFRfdmFsdWVzLnBkZiIsIHBsb3QgPSBwbG90MykNCg0KDQoNCiAgICAgIyBSZW9yZ2FuaXphciBvcyBkYWRvcyBwYXJhIG8gZm9ybWF0byAnbG9uZycgdXNhbmRvIGEgZnVuw6fDo28gcGl2b3RfbG9uZ2VyKCkgZG8gcGFjb3RlIHRpZHlyDQoNCnA0X2xvbmcgPC0gdGlkeXI6OnBpdm90X2xvbmdlcihwNCwgY29scyA9IC1HUk9VUCwgbmFtZXNfdG8gPSAiVmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAiVmFsdWUiKQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDQNCg0KcGxvdDQgPC0gZ2dwbG90KHA0X2xvbmcsIGFlcyh4ID0gR1JPVVAsIHkgPSBWYWx1ZSwgZmlsbCA9IEdST1VQKSkgKyANCiAgZ2VvbV9ib3hwbG90KG91dGxpZXIuc2hhcGUgPSBOQSwgYWxwaGEgPSAwLjUsIHdpZHRoID0gMC43LCBjb2VmID0gMCwgbHdkID0gMC40LCBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV9qaXR0ZXIoYWVzKGNvbG9yID0gR1JPVVApLCBzaXplID0gMS41LCB3aWR0aCA9IDAuMTUsIGFscGhhID0gMC41KSArDQogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMKSArIA0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWEyODg3IiwgIiM3OTlkZTQiKSkgKyAgDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWEyODg3IiwgIiM3OTlkZTQiKSkgKw0KICBmYWNldF93cmFwKH4gVmFyaWFibGUsIHNjYWxlcyA9ICJmcmVlX3kiLCANCiAgICAgICAgICAgICBsYWJlbGxlciA9IGxhYmVsbGVyKFZhcmlhYmxlID0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoUkFWTFRfQTUgPSAiUkFWTFRfQTUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBVkxUX0E2ID0gIiBSQVZMVF9BNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFWTFRfQTcgPSAiUkFWTFRfQTciKSkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMjApKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1LCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYWNlID0gImJvbGQiKSkNCg0KDQojIEFqdXN0ZSBhcyBlc2NhbGFzIGRlIGFjb3JkbyBjb20gbyBtw61uaW1vIGUgbcOheGltbyBkb3MgZGFkb3MNCiNwbG90MSA8LSBwbG90MSArIHlsaW0obWluKHAxX2xvbmckVmFsdWUpLCBtYXgocDFfbG9uZyRWYWx1ZSkpDQoNCnBsb3Q0IDwtIHBsb3Q0ICsgc3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJ0LnRlc3QiICwgbGFiZWwueSA9IDE4LCBsYWJlbC54ID0gMS4xKQ0KDQpwbG90NA0KDQojZ2dzYXZlKGZpbGVuYW1lID0gIlJBVkxUX0E1X0E3LnBkZiIsIHBsb3QgPSBwbG90NCkNCg0KDQoNCiAgICAgIyBSZW9yZ2FuaXphciBvcyBkYWRvcyBwYXJhIG8gZm9ybWF0byAnbG9uZycgdXNhbmRvIGEgZnVuw6fDo28gcGl2b3RfbG9uZ2VyKCkgZG8gcGFjb3RlIHRpZHlyDQoNCnA1X2xvbmcgPC0gdGlkeXI6OnBpdm90X2xvbmdlcihwNSwgY29scyA9IC1HUk9VUCwgbmFtZXNfdG8gPSAiVmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAiVmFsdWUiKQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFA1DQoNCnBsb3Q1IDwtIGdncGxvdChwNV9sb25nLCBhZXMoeCA9IEdST1VQLCB5ID0gVmFsdWUsIGZpbGwgPSBHUk9VUCkpICsgDQogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEsIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNywgY29lZiA9IDAsIGx3ZCA9IDAuNCwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IEdST1VQKSwgc2l6ZSA9IDEuNSwgd2lkdGggPSAwLjE1LCBhbHBoYSA9IDAuNSkgKw0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsgIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsNCiAgZmFjZXRfd3JhcCh+IFZhcmlhYmxlLCBzY2FsZXMgPSAiZnJlZV95IiwgDQogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihWYXJpYWJsZSA9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKFJBVkxUX1RPVEFMU0NPUkUgPSAiUkFWTFRfVE9UQUxTQ09SRSIpKSkgKw0KICAjc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMjApKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1LCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsICksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJib2xkIikpDQoNCg0KIyBBanVzdGUgYXMgZXNjYWxhcyBkZSBhY29yZG8gY29tIG8gbcOtbmltbyBlIG3DoXhpbW8gZG9zIGRhZG9zDQojcGxvdDEgPC0gcGxvdDEgKyB5bGltKG1pbihwMV9sb25nJFZhbHVlKSwgbWF4KHAxX2xvbmckVmFsdWUpKQ0KDQpwbG90NSA8LSBwbG90NSArIHN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiAsICBsYWJlbC55ID0gNjUsIGxhYmVsLnggPTEuNykNCg0KcGxvdDUNCg0KI2dnc2F2ZShmaWxlbmFtZSA9ICJSQVZMVF90b3RhbC5wZGYiLCBwbG90ID0gcGxvdDUpDQoNCg0KDQoNCiAgICAgIyBSZW9yZ2FuaXphciBvcyBkYWRvcyBwYXJhIG8gZm9ybWF0byAnbG9uZycgdXNhbmRvIGEgZnVuw6fDo28gcGl2b3RfbG9uZ2VyKCkgZG8gcGFjb3RlIHRpZHlyDQoNCnA2X2xvbmcgPC0gdGlkeXI6OnBpdm90X2xvbmdlcihwNiwgY29scyA9IC1HUk9VUCwgbmFtZXNfdG8gPSAiVmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAiVmFsdWUiKQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFA2DQoNCnBsb3Q2IDwtIGdncGxvdChwNl9sb25nLCBhZXMoeCA9IEdST1VQLCB5ID0gVmFsdWUsIGZpbGwgPSBHUk9VUCkpICsgDQogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEsIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNywgY29lZiA9IDAsIGx3ZCA9IDAuNCwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IEdST1VQKSwgc2l6ZSA9IDEuNSwgd2lkdGggPSAwLjE1LCBhbHBoYSA9IDAuNSkgKw0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsgIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsNCiAgZmFjZXRfd3JhcCh+IFZhcmlhYmxlLCBzY2FsZXMgPSAiZnJlZV95IiwgDQogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihWYXJpYWJsZSA9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKFJBVkxUX0IxID0gIlJBVkxUX0IxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVZMVF9SRUMgPSAiIFJBVkxUX1JFQyINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgKw0KICAjc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMjApKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1LCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYW1pbHkgPSAiVGFob21hIiwgZmFjZSA9ICJib2xkIiksDQogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYW1pbHkgPSAiVGFob21hIiksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFtaWx5ID0gIlRhaG9tYSIsIGZhY2UgPSAiYm9sZCIpKQ0KDQoNCiMgQWp1c3RlIGFzIGVzY2FsYXMgZGUgYWNvcmRvIGNvbSBvIG3DrW5pbW8gZSBtw6F4aW1vIGRvcyBkYWRvcw0KI3Bsb3QxIDwtIHBsb3QxICsgeWxpbShtaW4ocDFfbG9uZyRWYWx1ZSksIG1heChwMV9sb25nJFZhbHVlKSkNCg0KcGxvdDYgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsIGxhYmVsLnkgPSAxNSwgbGFiZWwueCA9IDEuMSkNCg0KcGxvdDYNCg0KDQogICAgICMgUmVvcmdhbml6YXIgb3MgZGFkb3MgcGFyYSBvIGZvcm1hdG8gJ2xvbmcnIHVzYW5kbyBhIGZ1bsOnw6NvIHBpdm90X2xvbmdlcigpIGRvIHBhY290ZSB0aWR5cg0KDQpwN19sb25nIDwtIHRpZHlyOjpwaXZvdF9sb25nZXIocDcsIGNvbHMgPSAtR1JPVVAsIG5hbWVzX3RvID0gIlZhcmlhYmxlIiwgdmFsdWVzX3RvID0gIlZhbHVlIikNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFA3DQoNCnBsb3Q3IDwtIGdncGxvdChwN19sb25nLCBhZXMoeCA9IEdST1VQLCB5ID0gVmFsdWUsIGZpbGwgPSBHUk9VUCkpICsgDQogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEsIGFscGhhID0gMC41LCB3aWR0aCA9IDAuNywgY29lZiA9IDAsIGx3ZCA9IDAuNCwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IEdST1VQKSwgc2l6ZSA9IDEuNSwgd2lkdGggPSAwLjE1LCBhbHBoYSA9IDAuNSkgKw0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsgIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhMjg4NyIsICIjNzk5ZGU0IikpICsNCiAgZmFjZXRfd3JhcCh+IFZhcmlhYmxlLCBzY2FsZXMgPSAiZnJlZV95IiwgDQogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihWYXJpYWJsZSA9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBVkxUX1JFVEVOVElPTiA9ICJSQVZMVF9SRVRFTlRJT04iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRSA9ICJSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UiKSkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMikpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMSwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLA0KICAgICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsIGZhbWlseSA9ICJUYWhvbWEiLCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhbWlseSA9ICJUYWhvbWEiKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYW1pbHkgPSAiVGFob21hIiwgZmFjZSA9ICJib2xkIikpDQoNCg0KcGxvdDcgKyBzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIgKQ0KDQpwbG90Nw0KDQpgYGANCg0KYGBge3IgQ2FsY3VsYXRpbmd9DQoNCmxpYnJhcnkodGliYmxlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShndEV4dHJhcykNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShocmJydGhlbWVzKQ0KbGlicmFyeShvcGVueGxzeCkNCg0KDQojZGF0YSA8LSByZWFkeGw6OnJlYWRfeGxzeCAoIkJQQXNfRkRUc18gUkFWTFRzX0VzY29yZVoueGxzeCIsIHNoZWV0ID0gMSkNCg0KDQojaW5zdGFsbC5wYWNrYWdlcygidGliYmxlIikNCiNpbnN0YWxsLnBhY2thZ2VzKCJvcGVueGxzeCIpDQoNCg0KDQoNCiNzZXR3ZCgiQzovVXNlcnMvVXNlci9EZXNrdG9wL0FuYWx5c2lzIGluIFIvTmV1cm9Db3ZpZCIpDQoNCmdldHdkKCkNCg0KDQpkYXRhIDwtIHJlYWR4bDo6cmVhZF94bHN4ICgiREFET1NfQlJVVE9TX0NPVklEX0xPTkdBX1BSRUVOQ0hFTkRPLnhsc3giKQ0KDQpkYXRhIDwtIG5hLm9taXQoZGF0YSkNCg0KIA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCUEEgWi1TY29yZSAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxwrogVHJ5DQogICAgICAgICAgICAgICAgICAjIFRFTlRBVElWQSBERSBDUklBw4fDg08gREUgRlVOw4fDg08NCg0KY2JpbmQoZGF0YSkNCg0KY2FsY3VsYXJfel9zY29yZSA8LSBmdW5jdGlvbih4LCBtZWRpYSwgZGVzdmlvX3BhZHJhbykgew0KICBpZiAoeCA+PSAyMSAmIHggPD0gMzApIHsNCiAgICB6X3Njb3JlIDwtICh4IC0gbWVkaWEpIC8gZGVzdmlvX3BhZHJhbw0KICAgIHJldHVybih6X3Njb3JlKQ0KICB9DQp9DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDLCuiBUcnkNCg0KIyBEZWZpbmlyIG9zIHZhbG9yZXMgY29uc3RhbnRlcyBkZSBtw6lkaWEgZSBkZXN2aW8gcGFkcsOjbyBwYXJhIGNhZGEgZmFpeGEgZXTDoXJpYQ0KY29uc3RhbnRlcyA8LSB0cmliYmxlKA0KICB+TElNSVRfQUdFLCB+bWVkaWFfY29uc3RhbnRlLCB+ZGVzdmlvX3BhZHJhb19jb25zdGFudGUsDQogICIxOC0yMCIsIDg1Ljc5LCAyMi41MywNCiAgIjIxLTMwIiwgODcuMDgsIDIxLjUwLA0KICAiMzEtNDAiLCA4NS40OCwgMjIuNTYsDQogICI0MS00OSIsIDgwLjcyLCAyMi44NQ0KKQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgM8K6IFRyeQ0KICAjIENPTUXDh0FSIERBUVVJIC0tLS0tPiAgREVURVJNSU5BTkRPIExJTUlURVMgQSBTRVJFTSBBUExJQ0FET1MNCg0KbGltaXRlc19pZGFkZSA8LSBjKDE4LCAyMCwgMzAsIDQwLCA1MCkNCg0KDQpkYXRhIDwtIGRhdGEgJT4lDQogIG11dGF0ZShMSU1JVF9BR0UgPSBjdXQoQUdFLCBicmVha3MgPSBsaW1pdGVzX2lkYWRlLCBsYWJlbHMgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiMTgtMjAiLCAiMjEtMzAiLCAiMzEtNDAiLCAiNDEtNTAiKSkpICU+JSANCiAgYXJyYW5nZShBR0UpDQogIA0KZGF0YQ0KDQojIENhbGN1bGFyIG8gWi1zY29yZSB1c2FuZG8gYXMgY29uc3RhbnRlcyBwYXJhIGNhZGEgZmFpeGEgZXTDoXJpYQ0KDQoNCiNCUEFfQ09OQw0KDQpCUEFfQ09OQ19Fc2NvcmVaIDwtIGRhdGEgJT4lDQogIG11dGF0ZShCUEFfQ09OQ19Fc2NvcmVaID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKEJQQV9DT05DX1BPSU5UUyAtIDg1Ljc5KSAvIDIyLjUzLA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKEJQQV9DT05DX1BPSU5UUyAtIDg3LjA4KSAvIDIxLjUwLA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKEJQQV9DT05DX1BPSU5UUyAtIDg1LjQ4KSAvIDIyLjU2LA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKEJQQV9DT05DX1BPSU5UUyAtIDgwLjcyKSAvIDIyLjg1LA0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsIEFHRSxHUk9VUCxFRFVfTEVWRUwsIExJTUlUX0FHRSxCUEFfQ09OQ19QT0lOVFMsIEJQQV9DT05DX0VzY29yZVopICU+JSANCiAgYXJyYW5nZShJRCkNCg0KQlBBX0NPTkNfRXNjb3JlWg0KDQoNCiNCUEFfRElWRA0KDQpCUEFfRElWSURfRXNjb3JlWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoQlBBX0RJVklEX0VzY29yZVogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoQlBBX0RJVklEX1BPSU5UUyAtIDc5LjQyKSAvIDIzLjQ5LA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKEJQQV9ESVZJRF9QT0lOVFMgLSA3Ny4xOSkgLyAyNC40MiwNCiAgICBMSU1JVF9BR0UgPT0gIjMxLTQwIiB+IChCUEFfRElWSURfUE9JTlRTIC0gNzEuMjgpIC8gMjUuMzMsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoQlBBX0RJVklEX1BPSU5UUyAtIDYxLjIyKSAvIDI2LjUzLA0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsQlBBX0RJVklEX1BPSU5UUywgQlBBX0RJVklEX0VzY29yZVopICU+JSANCiAgYXJyYW5nZShJRCkNCg0KQlBBX0RJVklEX0VzY29yZVoNCg0KDQojQlBBX0FMVEVSTg0KDQpCUEFfQUxURVJOX0VzY29yZVogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKEJQQV9BTFRFUk5fRXNjb3JlWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChCUEFfQUxURVJOX1BPSU5UUyAtIDkzLjIxKSAvIDIxLjc2LA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKEJQQV9BTFRFUk5fUE9JTlRTIC0gODcuNTMpIC8gMjMuNTYsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoQlBBX0FMVEVSTl9QT0lOVFMgLSA4Mi4yOCkgLyAyNC44NCwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChCUEFfQUxURVJOX1BPSU5UUyAtIDcyLjcwKSAvIDI1LjgwLA0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsQlBBX0FMVEVSTl9QT0lOVFMsIEJQQV9BTFRFUk5fRXNjb3JlWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQpCUEFfQUxURVJOX0VzY29yZVogDQoNCg0KI0JQQV9UT1RBTA0KDQpCUEFfVE9UQUxfRXNjb3JlWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoQlBBX1RPVEFMX0VzY29yZVogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoQlBBX1RPVEFMIC0gMjU4LjQyKSAvIDU2LjU5LA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKEJQQV9UT1RBTCAtIDI1MS43OSkgLyA1OC42MSwNCiAgICBMSU1JVF9BR0UgPT0gIjMxLTQwIiB+IChCUEFfVE9UQUwgLSAyMzkuMDQpIC8gNjIuNzcsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoQlBBX1RPVEFMIC0gMjE0LjY1KSAvIDY0LjMzLA0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JS0NCiAgc2VsZWN0KElELEJQQV9UT1RBTCwgQlBBX1RPVEFMX0VzY29yZVopICU+JSANCiAgYXJyYW5nZShJRCkNCg0KQlBBX1RPVEFMX0VzY29yZVoNCg0KDQoNCkJQQXNfRXNjb3JlWiA8LSBiaW5kX2NvbHMoQlBBX0NPTkNfRXNjb3JlWiwgQlBBX0RJVklEX0VzY29yZVosIEJQQV9BTFRFUk5fRXNjb3JlWiwgQlBBX1RPVEFMX0VzY29yZVopICU+JSANCiAgICAgICAgICBuYS5vbWl0KCkNCg0Kd3JpdGUueGxzeChCUEFzX0VzY29yZVosIGZpbGUgPSAiQlBBc19Fc2NvcmVaLnhsc3giKQ0KDQoNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZEVCBaLVNjb3JlICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoNCmRhdGEgPC0gcmVhZHhsOjpyZWFkX3hsc3ggKCJEQURPU19CUlVUT1NfQ09WSURfTE9OR0FfUFJFRU5DSEVORE8ueGxzeCIpDQoNCmRhdGEgPC0gbmEub21pdChkYXRhKQ0KDQoNCiAgICAgICAgICAgICAgICAjIERFVEVSTUlOQU5ETyBMSU1JVEVTIEEgU0VSRU0gQVBMSUNBRE9TDQoNCmxpbWl0ZXNfaWRhZGUgPC0gYygxOCwgMTksIDM0LCA1MCkNCg0KICAgICAgICAgICAgICAgICMgQURJQ0lPTkFORE8gQ09MVU5BIEFPIERBRE8sIFJFTEFDSU9OQURPIEFPUyBMSU1JVEVTIERFU0VKQURPUw0KDQpkYXRhIDwtIGRhdGEgJT4lDQogIG11dGF0ZShMSU1JVF9BR0UgPSBjdXQoQUdFLCBicmVha3MgPSBsaW1pdGVzX2lkYWRlLCBsYWJlbHMgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiMTgiLCAiMTktMzQiLCAiMzUtNTAiKSkpICU+JSANCiAgYXJyYW5nZShBR0UpDQogIA0KZGF0YQ0KDQoNCiNGRFQgUkVBRElORw0KDQpGRFRfUkVBRElOR19USU1FX1ogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKEZEVF9SRUFESU5HX1RJTUVfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4IiB+IChGRFRfUkVBRElOR19USU1FIC0gMjAuNCkgLyA0LjEsDQogICAgTElNSVRfQUdFID09ICIxOS0zNCIgfiAoRkRUX1JFQURJTkdfVElNRSAtIDIyKSAvIDUuNiwNCiAgICBMSU1JVF9BR0UgPT0gIjM1LTUwIiB+IChGRFRfUkVBRElOR19USU1FIC0gMjMuOSkgLyA2LjUsDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxBR0UsIEVEVV9MRVZFTCxHUk9VUCwgTElNSVRfQUdFLEZEVF9SRUFESU5HX1RJTUUsICBGRFRfUkVBRElOR19USU1FX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpGRFRfUkVBRElOR19USU1FX1oNCg0KDQoNCiNGRFQgQ09VVElORw0KDQpGRFRfQ09VTlRJTkdfVElNRV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShGRFRfQ09VTlRJTkdfVElNRV9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgiIH4gKEZEVF9DT1VOVElOR19USU1FIC0gMjMuOCkgLyAzLjUsDQogICAgTElNSVRfQUdFID09ICIxOS0zNCIgfiAoRkRUX0NPVU5USU5HX1RJTUUgLSAyNC4yKSAvIDUuMiwNCiAgICBMSU1JVF9BR0UgPT0gIjM1LTUwIiB+IChGRFRfQ09VTlRJTkdfVElNRSAtIDI3LjEpIC8gNy4yLA0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsRkRUX0NPVU5USU5HX1RJTUUsIEZEVF9DT1VOVElOR19USU1FX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpGRFRfQ09VTlRJTkdfVElNRV9aDQoNCg0KI0ZEVCBDSE9PU0lORw0KDQpGRFRfQ0hPT1NJTkdfVElNRV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShGRFRfQ0hPT1NJTkdfVElNRV9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgiIH4gKEZEVF9DSE9PU0lOR19USU1FIC0gMzQpIC8gNS45LA0KICAgIExJTUlUX0FHRSA9PSAiMTktMzQiIH4gKEZEVF9DSE9PU0lOR19USU1FIC0gMzYuOSkgLyAxMCwNCiAgICBMSU1JVF9BR0UgPT0gIjM1LTUwIiB+IChGRFRfQ0hPT1NJTkdfVElNRSAtIDQxLjcpIC8gMTQuNSwNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELEZEVF9DSE9PU0lOR19USU1FLCBGRFRfQ0hPT1NJTkdfVElNRV9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KRkRUX0NIT09TSU5HX1RJTUVfWg0KDQoNCg0KI0ZEVCBDSEFOR0lORw0KDQpGRFRfQ0hBTkdJTkdfVElNRV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShGRFRfQ0hBTkdJTkdfVElNRV9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgiIH4gKEZEVF9DSEFOR0lOR19USU1FIC0gNDQuOCkgLyA5LjEsDQogICAgTElNSVRfQUdFID09ICIxOS0zNCIgfiAoRkRUX0NIQU5HSU5HX1RJTUUgLSA0NikgLyAxMywNCiAgICBMSU1JVF9BR0UgPT0gIjM1LTUwIiB+IChGRFRfQ0hBTkdJTkdfVElNRSAtIDUzLjYpIC8gMTguNCwNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELEZEVF9DSEFOR0lOR19USU1FLCBGRFRfQ0hBTkdJTkdfVElNRV9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KRkRUX0NIQU5HSU5HX1RJTUVfWg0KDQoNCg0KDQojRkRUIElOSElCSVRJT04NCg0KRkRUX0lOSElCSVRJT05fWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoRkRUX0lOSElCSVRJT05fWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4IiB+IChGRFRfSU5ISUJJVElPTiAtIDEzLjYpIC8gNC45LA0KICAgIExJTUlUX0FHRSA9PSAiMTktMzQiIH4gKEZEVF9JTkhJQklUSU9OIC0gMTQuOCkgLyA4LjMsDQogICAgTElNSVRfQUdFID09ICIzNS01MCIgfiAoRkRUX0lOSElCSVRJT04gLSAxNy44KSAvIDEyLA0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsRkRUX0lOSElCSVRJT04sIEZEVF9JTkhJQklUSU9OX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpGRFRfSU5ISUJJVElPTl9aDQoNCg0KDQoNCiNGRFQgRkxFWEJJTElUWQ0KDQpGRFRfRkxFWElCSUxJVFlfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoRkRUX0ZMRVhJQklMSVRZX1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOCIgfiAoRkRUX0ZMRVhJQklMSVRZIC0gMjQuNCkgLyA3LjgsDQogICAgTElNSVRfQUdFID09ICIxOS0zNCIgfiAoRkRUX0ZMRVhJQklMSVRZIC0gMjMuOSkgLyAxMC44LA0KICAgIExJTUlUX0FHRSA9PSAiMzUtNTAiIH4gKEZEVF9GTEVYSUJJTElUWSAtIDI5LjcpIC8gMTUuNywNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELEZEVF9GTEVYSUJJTElUWSwgRkRUX0ZMRVhJQklMSVRZX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpGRFRfRkxFWElCSUxJVFlfWg0KDQoNCg0KI0JJTkQgQ09MUyBFIFNBTFZBUg0KDQpGRFRfRXNjb3JlWiA8LSBiaW5kX2NvbHMoRkRUX1JFQURJTkdfVElNRV9aLEZEVF9DT1VOVElOR19USU1FX1osRkRUX0NIT09TSU5HX1RJTUVfWiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBGRFRfQ0hBTkdJTkdfVElNRV9aLEZEVF9JTkhJQklUSU9OX1osRkRUX0ZMRVhJQklMSVRZX1opDQoNCg0KDQp3cml0ZS54bHN4KEZEVF9Fc2NvcmVaLCBmaWxlID0gIkZEVF9Fc2NvcmVaLnhsc3giKQ0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSQVZMVFMgWi1TY29yZSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpkYXRhIDwtIHJlYWR4bDo6cmVhZF94bHN4ICgiREFET1NfQlJVVE9TX0NPVklEX0xPTkdBX1BSRUVOQ0hFTkRPLnhsc3giKQ0KDQpkYXRhIDwtIG5hLm9taXQoZGF0YSkNCg0KDQoNCmxpbWl0ZXNfaWRhZGUgPC0gYygxOCwgMjAsIDMwLCA0MCwgNTApDQoNCg0KZGF0YSA8LSBkYXRhICU+JQ0KICBtdXRhdGUoTElNSVRfQUdFID0gDQogICAgICAgICAgIGN1dChBR0UsIGJyZWFrcyA9IGxpbWl0ZXNfaWRhZGUsIGxhYmVscyA9IA0KICAgICAgICAgICAgICAgICBjKCIxOC0yMCIsICIyMS0zMCIsICIzMS00MCIsICI0MS01MCIpKSkgJT4lIA0KICBhcnJhbmdlKEFHRSkgDQogIA0KZGF0YQ0KDQoNCiNSQVZMVCBBMQ0KDQpSQVZMVF9BMV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9BMV9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKFJBVkxUX0ExIC0gNi44KSAvIDEuNywNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9BMSAtIDYuNSkgLyAxLjcsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfQTEgLSA2LjEpIC8gMS42LA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKFJBVkxUX0ExIC0gNikgLyAxLjYsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELCBBR0UsRURVX0xFVkVMLEdST1VQLCBMSU1JVF9BR0UsUkFWTFRfQTEsICBSQVZMVF9BMV9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KUkFWTFRfQTFfWiANCg0KDQoNCg0KI1JBVkxUIEEyDQoNClJBVkxUX0EyX1ogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKFJBVkxUX0EyX1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfQTIgLSA5LjUpIC8gMi4yLA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX0EyIC0gOC45KSAvIDIuMiwNCiAgICBMSU1JVF9BR0UgPT0gIjMxLTQwIiB+IChSQVZMVF9BMiAtIDguNykgLyAyLA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKFJBVkxUX0EyIC0gOC41KSAvIDIsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX0EyLCBSQVZMVF9BMl9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KUkFWTFRfQTJfWg0KDQoNCiNSQVZMVCBBMw0KDQpSQVZMVF9BM19aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9BM19aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKFJBVkxUX0EzIC0gMTEpIC8gMi4yLA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX0EzIC0gMTAuNCkgLyAyLjQsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfQTMgLSAxMC4zKSAvIDIuMSwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9BMyAtIDkuOCkgLyAyLjUsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX0EzLCBSQVZMVF9BM19aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KUkFWTFRfQTNfWg0KDQoNCg0KI1JBVkxUIEE0DQoNClJBVkxUX0E0X1ogPC0gZGF0YSAlPiUNCiAgbXV0YXRlKFJBVkxUX0E0X1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfQTQgLSAxMS44KSAvIDIuNCwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9BNCAtIDExLjQpIC8gMi40LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX0E0IC0gMTEuNCkgLyAyLjEsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoUkFWTFRfQTQgLSAxMC43KSAvIDIuNywNCg0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsUkFWTFRfQTQsUkFWTFRfQTRfWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQoNClJBVkxUX0E0X1oNCg0KDQoNCg0KDQojUkFWTFQgQTUNCg0KUkFWTFRfQTVfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfQTVfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9BNSAtIDEyLjIpIC8gMi40LA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX0E1IC0gMTIuMikgLyAyLjIsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfQTUgLSAxMi4yKSAvIDIuMiwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9BNSAtIDExLjcpIC8gMi42LA0KDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxSQVZMVF9BNSwgUkFWTFRfQTVfWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQoNClJBVkxUX0E1X1oNCg0KDQoNCg0KI1JBVkxUICBCMQ0KDQpSQVZMVF9CMV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9CMV9aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKFJBVkxUX0IxIC0gNi4zKSAvIDEuOCwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9CMSAtIDUuNykgLyAxLjgsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfQjEgLSA1LjMpIC8gMS42LA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKFJBVkxUX0IxIC0gNC45KSAvIDEuNiwNCg0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsUkFWTFRfQjEsIFJBVkxUX0IxX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpSQVZMVF9CMV9aDQoNCg0KDQojUkFWTFQgQTYNCg0KUkFWTFRfQTZfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfQTZfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9BNiAtIDExLjEpIC8gMi41LA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX0E2IC0gMTAuOSkgLyAyLjYsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfQTYgLSAxMC44KSAvIDIuNCwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9BNiAtIDkuOCkgLyAyLjgsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX0E2LCBSQVZMVF9BNl9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KUkFWTFRfQTZfWg0KDQoNCiNSQVZMVCBBNw0KDQpSQVZMVF9BN19aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9BN19aID0gY2FzZV93aGVuKA0KICAgIExJTUlUX0FHRSA9PSAiMTgtMjAiIH4gKFJBVkxUX0E3IC0gMTEpIC8gMi43LA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX0E3IC0gMTAuNykgLyAyLjcsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfQTcgLSAxMC4zKSAvIDIuNCwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9BNyAtIDkuNikgLyAyLjgsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX0E3LFJBVkxUX0E3X1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpSQVZMVF9BN19aDQoNCg0KDQojUkFWTFQgUkVDDQoNClJBVkxUX1JFQ19aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9SRUNfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9SRUMgLSAxMCkgLyA1LjcsDQogICAgTElNSVRfQUdFID09ICIyMS0zMCIgfiAoUkFWTFRfUkVDIC0gMTEuNCkgLyA0LjcsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfUkVDIC0gMTEuMSkgLyA0LjcsDQogICAgTElNSVRfQUdFID09ICI0MS01MCIgfiAoUkFWTFRfUkVDIC0gOS45KSAvIDUuNiwNCg0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsUkFWTFRfUkVDLFJBVkxUX1JFQ19aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KUkFWTFRfUkVDX1oNCg0KDQoNCiNSQVZMVF9UT1RBTFNDT1JFDQoNCg0KUkFWTFRfVE9UQUxTQ09SRV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9UT1RBTFNDT1JFX1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfVE9UQUxTQ09SRSAtIDUxLjQpIC8gOC43LA0KICAgIExJTUlUX0FHRSA9PSAiMjEtMzAiIH4gKFJBVkxUX1RPVEFMU0NPUkUgLSA0OS4zKSAvIDguNiwNCiAgICBMSU1JVF9BR0UgPT0gIjMxLTQwIiB+IChSQVZMVF9UT1RBTFNDT1JFIC0gNDguNikgLyA4LA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKFJBVkxUX1RPVEFMU0NPUkUgLSA0Ni43KSAvIDkuNiwNCg0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsUkFWTFRfVE9UQUxTQ09SRSwgUkFWTFRfVE9UQUxTQ09SRV9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNClJBVkxUX1RPVEFMU0NPUkVfWg0KDQoNCg0KI1JBVkxUX0FMVA0KDQpSQVZMVF9BTFRfWiA8LSBkYXRhICU+JQ0KICBtdXRhdGUoUkFWTFRfQUxUX1ogPSBjYXNlX3doZW4oDQogICAgTElNSVRfQUdFID09ICIxOC0yMCIgfiAoUkFWTFRfQUxUIC0gMTcuMykgLyA3LjMsDQogICAgTElNSVRfQUdFID09ICIyMS0zMCIgfiAoUkFWTFRfQUxUIC0gMTYuOCkgLyA2LjUsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfQUxUIC0gMTcuOSkgLyA3LA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKFJBVkxUX0FMVCAtIDE2LjUpIC8gNy4zLA0KDQogICAgVFJVRSB+IE5BX3JlYWxfICAjIENhc28gcGFkcsOjbyBwYXJhIG91dHJhcyBmYWl4YXMgZXTDoXJpYXMNCiAgKSkgJT4lDQogIHNlbGVjdChJRCxSQVZMVF9BTFQsIFJBVkxUX0FMVF9aKSAlPiUgDQogIGFycmFuZ2UoSUQpDQoNCg0KDQoNClJBVkxUX0FMVF9aDQoNCg0KDQojUkFWTFRfUkVURU5USU9ODQoNClJBVkxUX1JFVEVOVElPTl9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9SRVRFTlRJT05fWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9SRVRFTlRJT04gLSAxKSAvIDAuMiwNCiAgICBMSU1JVF9BR0UgPT0gIjIxLTMwIiB+IChSQVZMVF9SRVRFTlRJT04gLSAxKSAvIDAuMjcsDQogICAgTElNSVRfQUdFID09ICIzMS00MCIgfiAoUkFWTFRfUkVURU5USU9OIC0gMC45NykgLyAwLjE5LA0KICAgIExJTUlUX0FHRSA9PSAiNDEtNTAiIH4gKFJBVkxUX1JFVEVOVElPTiAtIDEuMDEpIC8gMC4zNCwNCg0KICAgIFRSVUUgfiBOQV9yZWFsXyAgIyBDYXNvIHBhZHLDo28gcGFyYSBvdXRyYXMgZmFpeGFzIGV0w6FyaWFzDQogICkpICU+JQ0KICBzZWxlY3QoSUQsUkFWTFRfUkVURU5USU9OLCBSQVZMVF9SRVRFTlRJT05fWikgJT4lIA0KICBhcnJhbmdlKElEKQ0KDQoNClJBVkxUX1JFVEVOVElPTl9aDQoNCg0KDQojUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFDQoNClJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0VfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0UgLSAwLjk2KSAvIDAuMzMsDQogICAgTElNSVRfQUdFID09ICIyMS0zMCIgfiAoUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFIC0gMC45MikgLyAwLjM3LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRSAtIDAuOTEpIC8gMC4zMywNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0UgLSAwLjg2KSAvIDAuMzEsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRSwgUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0VfWg0KDQoNCg0KDQojUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFDQoNClJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRV9aIDwtIGRhdGEgJT4lDQogIG11dGF0ZShSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0VfWiA9IGNhc2Vfd2hlbigNCiAgICBMSU1JVF9BR0UgPT0gIjE4LTIwIiB+IChSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UgLSAwLjk2KSAvIDAuNjgsDQogICAgTElNSVRfQUdFID09ICIyMS0zMCIgfiAoUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFIC0gMC44OSkgLyAwLjE3LA0KICAgIExJTUlUX0FHRSA9PSAiMzEtNDAiIH4gKFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRSAtIDAuOTQpIC8gMC43NCwNCiAgICBMSU1JVF9BR0UgPT0gIjQxLTUwIiB+IChSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UgLSAwLjg0KSAvIDAuMTgsDQoNCiAgICBUUlVFIH4gTkFfcmVhbF8gICMgQ2FzbyBwYWRyw6NvIHBhcmEgb3V0cmFzIGZhaXhhcyBldMOhcmlhcw0KICApKSAlPiUNCiAgc2VsZWN0KElELFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRSwgUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFX1opICU+JSANCiAgYXJyYW5nZShJRCkNCg0KDQpSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0VfWg0KDQoNCg0KDQojQklORCBDT0xTIEUgU0FMVkFSDQoNClJBVkxUc19Fc2NvcmVaIDwtIGJpbmRfY29scyhSQVZMVF9BMV9aLCBSQVZMVF9BMl9aLCBSQVZMVF9BM19aLCBSQVZMVF9BNF9aLCBSQVZMVF9BNV9aLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBVkxUX0IxX1osIFJBVkxUX0E2X1osIFJBVkxUX0E3X1osIFJBVkxUX1JFQ19aLCBSQVZMVF9UT1RBTFNDT1JFX1osDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSQVZMVF9SRVRFTlRJT05fWiwgUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFX1osIFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRV9aICkgDQoNCg0KDQp3cml0ZS54bHN4KFJBVkxUc19Fc2NvcmVaLCBmaWxlID0gIlJBVkxUc19Fc2NvcmVaLnhsc3giKQ0KDQoNCg0KDQpgYGANCg0KDQpgYGB7ciBCdWJibGUgUGxvdHN9DQpsaWJyYXJ5KHRpYmJsZSkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ3RFeHRyYXMpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkodmlyaWRpcykNCmxpYnJhcnkoaHJicnRoZW1lcykNCg0KDQojc2V0d2QoIkM6L1VzZXJzL2ZlbGlwL0Rlc2t0b3AvUi8zX2FuYWxpc2UiKQ0KDQpnZXR3ZCgpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgQlBBcyBac2NvcmUgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KZGF0YSA8LSByZWFkeGw6OnJlYWRfeGxzeCAoIkJQQXNfRXNjb3JlWi54bHN4Iiwgc2hlZXQgPSAxKQ0KDQpzdW1tYXJ5KGRhdGEpDQpjb2xuYW1lcyhkYXRhKQ0KDQpkYXRhIDwtIGRhdGEgJT4lIHJlbmFtZShJRCA9IElELi4uMSkgJT4lIHNlbGVjdCgtSUQuLi44LC1JRC4uLjExLC1JRC4uLjE0KQ0KICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZpbHRyYW5kbyBkYWRvcyBCUEFzDQoNCnAxIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsRURVX0xFVkVMICwgQUdFLCBCUEFfQ09OQ19QT0lOVFMgLCBCUEFfQ09OQ19Fc2NvcmVaICApDQoNCnAyIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsRURVX0xFVkVMLCBBR0UsIEJQQV9ESVZJRF9QT0lOVFMgLCBCUEFfRElWSURfRXNjb3JlWiAgKQ0KDQpwMyA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEVEVV9MRVZFTCAsQUdFLCBCUEFfQUxURVJOX1BPSU5UUyAsIEJQQV9BTFRFUk5fRXNjb3JlWiApDQoNCnB0b3RhbCA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEVEVV9MRVZFTCAsQUdFLCBCUEFfQUxURVJOX1BPSU5UUyAsIEJQQV9BTFRFUk5fRXNjb3JlWiApDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQMSAgDQogIA0KDQpjb3Jlc0JQQSA8LSBjKCIjMWEyODg3IiwgIiM3OTlkZTQiKQ0KDQoNCg0KcDEgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIEJQQV9DT05DX1BPSU5UUywNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBCUEFfQ09OQ19Fc2NvcmVaLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gQlBBX0NPTkNfRXNjb3JlWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzQlBBKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBGb2N1c2VkIEF0dGVudGlvbiIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4LCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCxmYWNlID0gImJvbGQiKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQogICAgICAgICAgICAjIEdyw6FmaWNvIGludGVyYXRpdm8gZGEgYmlibGlvdGV4YSBnZ3Bsb3R0bHkNCg0KcHAxIDwtIGdncGxvdGx5KHAxLCB0b29sdGlwPSJ0ZXh0IikgJT4lDQogIA0KICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQogIA0KDQpwcDENCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUDINCg0KcDIgPC0gZGF0YSAlPiUNCiAgYXJyYW5nZShJRCkgJT4lDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBCUEFfRElWSURfUE9JTlRTLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIEJQQV9ESVZJRF9Fc2NvcmVaLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gQlBBX0RJVklEX0VzY29yZVosIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcsIHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNCUEEpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIERpdmlkIEF0dGVudGlvbiIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4LCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCxmYWNlID0gImJvbGQiKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICMgR3LDoWZpY28gaW50ZXJhdGl2byBkYSBiaWJsaW90ZXhhIGdncGxvdHRseQ0KDQpwcDIgPC0gZ2dwbG90bHkocDIsIHRvb2x0aXA9InRleHQiKSAlPiUgIA0KIA0KICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICApKQ0KIA0KcHAyIA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQMw0KDQpwMyA8LSBkYXRhICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIEJQQV9BTFRFUk5fUE9JTlRTLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIEJQQV9BTFRFUk5fRXNjb3JlWiwgc2VwPSIiKSkgJT4lDQogIA0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBCUEFfQUxURVJOX0VzY29yZVosIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc0JQQSkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgQWx0ZXJuIEF0dGVudGlvbiIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4LCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCxmYWNlID0gImJvbGQiKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogIA0KDQogICAgICAgICAgICAgICAgICAgICMgR3LDoWZpY28gaW50ZXJhdGl2byBkYSBiaWJsaW90ZXhhIGdncGxvdHRseQ0KDQpwcDMgPC0gIGdncGxvdGx5KHAzLCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCnBwMw0KDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0JQQV9UT1RBTA0KDQpwdG90YWwgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIEJQQV9UT1RBTCwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBCUEFfVE9UQUxfRXNjb3JlWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEJQQV9UT1RBTF9Fc2NvcmVaLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNCUEEpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFRvdGFsIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4LGZhY2UgPSAiYm9sZCIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCiAgICAgICAgICAgICMgR3LDoWZpY28gaW50ZXJhdGl2byBkYSBiaWJsaW90ZXhhIGdncGxvdHRseQ0KDQpwcHRvdGFsIDwtIGdncGxvdGx5KHB0b3RhbCwgdG9vbHRpcD0idGV4dCIpICU+JQ0KICANCiAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KICANCg0KcHB0b3RhbA0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBGRFRzIFpzY29yZSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpkYXRhIDwtIHJlYWR4bDo6cmVhZF9leGNlbCgiRkRUX0VzY29yZVoueGxzeCIpDQoNCmRhdGEgPC0gbmEub21pdChkYXRhKQ0KDQpjb2xuYW1lcyhkYXRhKQ0KDQpkYXRhIDwtIGRhdGEgJT4lIHJlbmFtZShJRCA9IElELi4uMSkNCg0KZGF0YQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgRmlsdHJhbmRvIEZEVHMgDQoNCg0KDQpwNCA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgRkRUX1JFQURJTkdfVElNRSAsIEZEVF9SRUFESU5HX1RJTUVfWiAgKQ0KDQpwNSA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgRkRUX0NPVU5USU5HX1RJTUUgLCBGRFRfQ09VTlRJTkdfVElNRV9aICApDQoNCnA2IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBGRFRfQ0hPT1NJTkdfVElNRSAsIEZEVF9DSE9PU0lOR19USU1FX1ogKQ0KDQpwNyA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgRkRUX0NIQU5HSU5HX1RJTUUgLCBGRFRfQ0hBTkdJTkdfVElNRV9aICkNCg0KcDggPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIEZEVF9JTkhJQklUSU9OICwgRkRUX0lOSElCSVRJT05fWiApDQoNCnA5IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBGRFRfRkxFWElCSUxJVFkgLCBGRFRfRkxFWElCSUxJVFlfWiApDQoNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgUDQNCg0KDQpjb3Jlc0ZEVCA8LSBjKCIjZjZhM2FiIiwgIiMxYWI2YWMiKQ0KDQoNCg0KcDQgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIEZEVF9SRUFESU5HX1RJTUUsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgRkRUX1JFQURJTkdfVElNRV9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gRkRUX1JFQURJTkdfVElNRV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNGRFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIEZEVCBSZWFkaW5nIFRpbWUiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KcHA0IDwtIGdncGxvdGx5KHA0LCB0b29sdGlwPSJ0ZXh0IikgJT4lDQogIA0KICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KcHA0DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICBQNQ0KDQpwNSA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgRkRUX0NPVU5USU5HX1RJTUUsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgRkRUX0NPVU5USU5HX1RJTUVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEZEVF9DT1VOVElOR19USU1FX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc0ZEVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgRkRUIENvdW50aW5nIFRpbWUiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KcHA1IDwtIGdncGxvdGx5KHA1LCB0b29sdGlwPSJ0ZXh0IikgJT4lDQogIA0KICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KcHA1DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICBQNg0KDQoNCnA2IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBGRFRfQ0hPT1NJTkdfVElNRSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBGRFRfQ0hPT1NJTkdfVElNRV9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gRkRUX0NIT09TSU5HX1RJTUVfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzRkRUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBGRFQgQ2hvc3NpbmcgVGltZSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDYgPC0gZ2dwbG90bHkocDYsIHRvb2x0aXA9InRleHQiKSAlPiUNCiAgDQogIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQpwcDYNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDcNCg0KDQpwNzwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBGRFRfQ0hBTkdJTkdfVElNRSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBGRFRfQ0hBTkdJTkdfVElNRV9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gRkRUX0NIQU5HSU5HX1RJTUVfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzRkRUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBGRFQgQ2hhbmdpbmcgVGltZSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDcgPC0gZ2dwbG90bHkocDcsIHRvb2x0aXA9InRleHQiKSAlPiUNCiAgDQogIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQpwcDcNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDgNCg0KDQpwODwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBGRFRfSU5ISUJJVElPTiwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBGRFRfSU5ISUJJVElPTl9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gRkRUX0lOSElCSVRJT05fWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzRkRUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBGRFQgSW5iaXRpb24iLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCg0KcHA4IDwtIGdncGxvdGx5KHA4LCB0b29sdGlwPSJ0ZXh0IikgJT4lDQogIA0KICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KcHA4DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFA5DQoNCnA5PC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIEZEVF9GTEVYSUJJTElUWSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBGRFRfRkxFWElCSUxJVFlfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEZEVF9GTEVYSUJJTElUWV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNGRFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIEZEVCBGbGV4aWJpbGl0eSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDkgPC0gZ2dwbG90bHkocDksIHRvb2x0aXA9InRleHQiKSAlPiUNCiAgDQogIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQpwcDkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIFJBVkxUcyBac2NvcmUgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KDQpkYXRhIDwtIHJlYWR4bDo6cmVhZF94bHN4ICgiUkFWTFRzX0VzY29yZVoueGxzeCIpDQoNCmRhdGENCg0KZGF0YSA8LSBkYXRhICU+JSBkcGx5cjo6cmVuYW1lKElEID0gSUQuLi4xKQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGaWx0cmFuZG8gUkFWTFRzIA0KDQoNCg0KcDEwIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9BMSAsIFJBVkxUX0ExX1ogICkNCg0KcDExIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9BMiAsIFJBVkxUX0EyX1ogICkNCg0KcDEyIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9BMyAsIFJBVkxUX0EzX1ogKQ0KDQpwMTMgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIFJBVkxUX0E0ICwgUkFWTFRfQTRfWiApDQoNCnAxNCA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQTUgLCBSQVZMVF9BNV9aICkNCg0KcDE1IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9CMSAsIFJBVkxUX0IxX1ogKQ0KDQpwMTYgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIFJBVkxUX0E2ICwgUkFWTFRfQTZfWiApDQoNCnAxNyA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQTcgLCBSQVZMVF9BN19aICkNCg0KcDE4IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9UT1RBTFNDT1JFICwgUkFWTFRfVE9UQUxTQ09SRV9aICkNCg0KcDE5IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9SRUMgLCBSQVZMVF9SRUNfWiApDQoNCnAyMCA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfUkVURU5USU9OICwgUkFWTFRfUkVURU5USU9OX1ogKQ0KDQpwMjEgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIFJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRSAsIFJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRV9aICkNCg0KcDIyIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UgLCBSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0VfWiApDQoNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQMTANCg0KDQpjb3Jlc1JBVkxUPC0gYygiIzdmMWMyYiIsICIjOWM5Y2U5IikNCg0KDQoNCnAxMCA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfQTEsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfQTFfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX0ExX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBBMSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQoNCnBwMTAgPC0gZ2dwbG90bHkocDEwLCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDEwDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDExDQoNCg0KcDExIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9BMiwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9BMl9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfQTJfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEEyIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwMTEgPC0gZ2dwbG90bHkocDExLCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDExDQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQMTINCg0KDQpwMTIgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX0EzLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX0EzX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9BM19aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNSQVZMVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgUkFWTFQgQTMiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KcHAxMiA8LSBnZ3Bsb3RseShwMTIsIHRvb2x0aXA9InRleHQiKSAlPiUgIA0KICANCiAgICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCnBwMTINCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUDEzDQoNCg0KcDEzIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9BNCwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9BNF9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfQTRfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEE0Iiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQoNCg0KcHAxMyA8LSBnZ3Bsb3RseShwMTMsIHRvb2x0aXA9InRleHQiKSAlPiUgIA0KICANCiAgICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCnBwMTMNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgUDE0DQoNCg0KcDE0IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9BNSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9BNV9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfQTVfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEE0Iiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwMTQgPC0gZ2dwbG90bHkocDE0LCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDE0DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFAxNQ0KDQoNCnAxNSA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfQjEsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfQjFfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX0IxX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcscG9zaXRpb24gPSAiaml0dGVyIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBCMSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQpwcDE1IDwtIGdncGxvdGx5KHAxNSwgdG9vbHRpcD0idGV4dCIpICU+JSAgDQogIA0KICAgIGxheW91dChsZWdlbmQgPSBsaXN0KHggPSAwLCB5ID0gMS4wMSwNCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiAiLA0KICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICIjZWNmMGYxIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcmNvbG9yID0gIndoaXRlIiwNCiAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoID0gMSwNCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KHNpemUgPSA5LCBmYW1pbHkgPSAiQXJpYWwiLCBjb2xvciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSA1MCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlZ3JvdXBnYXAgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgIHRyYWNlb3JkZXIgPSAibm9ybWFsIg0KICAgICAgICAgICAgICAgICAgICAgKSkNCg0KcHAxNQ0KDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgUDE2DQoNCg0KcDE2IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9BNiwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9BNl9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfQTZfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEE2Iiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwMTYgPC0gZ2dwbG90bHkocDE2LCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCnBwMTYNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICBQMTcNCg0KcDE3IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9BNywNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9BN19aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfQTdfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEE3Iiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwMTcgPC0gZ2dwbG90bHkocDE3LCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDE3DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQMTgNCg0KcDE4IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9UT1RBTFNDT1JFLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX1RPVEFMU0NPUkVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX1RPVEFMU0NPUkVfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIFRvdGFsIFNjb3JlIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwMTggPC0gZ2dwbG90bHkocDE4LCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDE4DQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFAxOQ0KDQpwMTkgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX1RPVEFMU0NPUkUsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfVE9UQUxTQ09SRV9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfVE9UQUxTQ09SRV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNSQVZMVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgUkFWTFQgVG90YWwgU2NvcmUiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KcHAxOSA8LSBnZ3Bsb3RseShwMTksIHRvb2x0aXA9InRleHQiKSAlPiUgIA0KICANCiAgICBsYXlvdXQobGVnZW5kID0gbGlzdCh4ID0gMCwgeSA9IDEuMDEsDQogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICIgIiwNCiAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAiI2VjZjBmMSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJjb2xvciA9ICJ3aGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aCA9IDEsDQogICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChzaXplID0gOSwgZmFtaWx5ID0gIkFyaWFsIiwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gNTAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZWdyb3VwZ2FwID0gMjAsDQogICAgICAgICAgICAgICAgICAgICB0cmFjZW9yZGVyID0gIm5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICkpDQoNCnBwMTkNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQMjANCg0KcDIwIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9SRVRFTlRJT04sDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfUkVURU5USU9OX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9SRVRFTlRJT05fWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIFJldGVudGlvbiIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQoNCnBwMjAgPC0gZ2dwbG90bHkocDIwLCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCnBwMjANCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFAyMQ0KDQpwMjEgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0VfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX1BST0FUX0lOVEVSRkVSRU5DRV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LHBvc2l0aW9uID0gImppdHRlciIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNSQVZMVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgUkFWTFQgUHJvYXRpdmUgSW50ZXJmZXJlbmNlIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwMjEgPC0gZ2dwbG90bHkocDIxLCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDIxDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICBQMjINCg0KcDIyIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0UsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0VfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNyxwb3NpdGlvbiA9ICJqaXR0ZXIiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIFJldHJvYXRpdmUgSW50ZXJmZXJlbmNlIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCnBwMjIgPC0gZ2dwbG90bHkocDIyLCB0b29sdGlwPSJ0ZXh0IikgJT4lICANCiAgDQogICAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoeCA9IDAsIHkgPSAxLjAxLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiICIsDQogICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIiNlY2YwZjEiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyY29sb3IgPSAid2hpdGUiLA0KICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGggPSAxLA0KICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDksIGZhbWlseSA9ICJBcmlhbCIsIGNvbG9yID0gImJsYWNrIiksDQogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IDUwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2Vncm91cGdhcCA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgdHJhY2VvcmRlciA9ICJub3JtYWwiDQogICAgICAgICAgICAgICAgICAgICApKQ0KDQpwcDIyDQoNCg0KYGBgDQoNCg0KDQpgYGB7ciBDdXJ2YSBkZSBDcmVzY2ltZW50b30NCg0KI2luc3RhbGwucGFja2FnZXMoJ3Jlc2hhcGUyJykNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkocmVzaGFwZTIpDQoNCmdldHdkKCkNCg0KDQpkZiA8LSByZWFkX2V4Y2VsKCJSQVZMVHNfRXNjb3JlWi54bHN4IikNCg0KY29sbmFtZXMoZGYpDQoNCiMxYTI4ODcsICM3OTlkZTQNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUmVncmVzc8OjbyBMaW5lYXIgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KZGYuUkFWTFRzIDwtIGRmICU+JSBzZWxlY3QoR1JPVVAsQUdFLFJBVkxUX0ExLFJBVkxUX0EyLFJBVkxUX0EzLFJBVkxUX0E0LFJBVkxUX0E1KQ0KDQoNCmRmLm1lbHRlZCA8LSBtZWx0KGRmLlJBVkxUcywgaWQudmFycyA9IGMoIkFHRSIsICJHUk9VUCIpLCB2YXJpYWJsZS5uYW1lID0gIlZhcmnDoXZlbCIsIHZhbHVlLm5hbWUgPSAiUG9udHVhw6fDo28iKQ0KDQpjb3JlcyA8LSBjKCJDQVNFIiA9ICIjMWEyODg3IiwgIkNPTlRST0wiID0gIiM3OTlkZTQiKQ0KDQojIENyaWFyIG8gZ3LDoWZpY28gZGUgbGluaGFzDQpwIDwtIGdncGxvdChkZi5tZWx0ZWQsIGFlcyh4ID0gQUdFLCB5ID0gUG9udHVhw6fDo28sIGNvbG9yID0gR1JPVVApKSArDQogIGdlb21fcG9pbnQoYWxwaGE9MC41LCBwb3NpdGlvbiA9ICJqaXR0ZXIiLCBzaXplID0gMS41KSArDQogIHN0YXRfc21vb3RoKCBtZXRob2QgPSAibG0iLCBzcGFuID0gMC44LCBzZSA9IEYpKw0KICBsYWJzKHRpdGxlID0gIkdyw6FmaWNvIGRlIExpbmhhcyBSQVZMVCBwb3IgR3J1cG8iLA0KICAgICAgIHggPSAiQUdFIiwNCiAgICAgICB5ID0gIlBvbnR1YcOnw6NvIFJBVkxUIiwNCiAgICAgICBjb2xvciA9ICJHcnVwb3MiKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjb3JlcykgKw0KICBmYWNldF93cmFwKH4gVmFyacOhdmVsLCBzY2FsZXMgPSAiZnJlZV95IiwgbnJvdyA9IDEpICsgICMgU2VwYXJhw6fDo28gcG9yIEdST1VQIChjYXNvIGUgY29udHJvbGUpDQogIHRoZW1lX21pbmltYWwoKQ0KDQpwDQoNCnNoYXBpcm8udGVzdChkZi5SQVZMVHMkUkFWTFRfQTUpDQoNCmBgYA0KYGBge3IgTGluZSBQbG90fQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE3DqWRpYXMgZGUgRGVzZW1wZW5obyBwb3IgSWRhZGUgIyMjIyMjIyMjIyMjIyMjIyMNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkodGlkeXIpDQoNCmdldHdkKCkNCg0KZGF0YS5yYXZsdCA8LSByZWFkX2V4Y2VsKCJSQVZMVHNfRXNjb3JlWi54bHN4IikNCg0KZGF0YS5yYXZsdCA8LSBkYXRhLnJhdmx0ICU+JSAgc2VsZWN0KCJBR0UiLCJHUk9VUCIsIlJBVkxUX0ExIiwiUkFWTFRfQTIiLCAiUkFWTFRfQTMiLCJSQVZMVF9BNCIsICJSQVZMVF9BNSIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCmRhdGEucmF2bHQgPC0gZGF0YS5yYXZsdCAlPiUNCiAgbXV0YXRlKA0KICAgIGZhaXhhX2V0YXJpYSA9IGNhc2Vfd2hlbigNCiAgICAgIEFHRSA+PSAxOCAmIEFHRSA8PSAyMCB+ICIxOC0yMCIsDQogICAgICBBR0UgPj0gMjEgJiBBR0UgPD0gMzAgfiAiMjEtMzAiLA0KICAgICAgQUdFID49IDIxICYgQUdFIDw9IDMwIH4gIjIxLTMwIiwNCiAgICAgIEFHRSA+PSAzMSAmIEFHRSA8PSA0MCB+ICIzMS00MCIsDQogICAgICBBR0UgPj0gNDEgJiBBR0UgPD0gNTAgfiAiNDEtNTAiLA0KICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8NCiAgICApDQogICkNCg0KbWVkaWFzX3Jhdmx0IDwtIGRhdGEucmF2bHQgJT4lDQogIGdyb3VwX2J5KEdST1VQLCBmYWl4YV9ldGFyaWEpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgbWVkaWFfUkFWTFRfQTEgPSBtZWFuKFJBVkxUX0ExLCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0EyID0gbWVhbihSQVZMVF9BMiwgbmEucm0gPSBUUlVFKSwNCiAgICBtZWRpYV9SQVZMVF9BMyA9IG1lYW4oUkFWTFRfQTMsIG5hLnJtID0gVFJVRSksDQogICAgbWVkaWFfUkFWTFRfQTQgPSBtZWFuKFJBVkxUX0E0LCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0E1ID0gbWVhbihSQVZMVF9BNSwgbmEucm0gPSBUUlVFKQ0KICApICU+JQ0KICB1bmdyb3VwKCkNCg0KDQptZWRpYXNfcmF2bHQNCg0KbWVkaWFzX3Jhdmx0IDwtIGRhdGEucmF2bHQgJT4lDQogIGdyb3VwX2J5KEdST1VQLCBmYWl4YV9ldGFyaWEpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgbWVkaWFfUkFWTFRfQTEgPSBtZWFuKFJBVkxUX0ExLCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0EyID0gbWVhbihSQVZMVF9BMiwgbmEucm0gPSBUUlVFKSwNCiAgICBtZWRpYV9SQVZMVF9BMyA9IG1lYW4oUkFWTFRfQTMsIG5hLnJtID0gVFJVRSksDQogICAgbWVkaWFfUkFWTFRfQTQgPSBtZWFuKFJBVkxUX0E0LCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0E1ID0gbWVhbihSQVZMVF9BNSwgbmEucm0gPSBUUlVFKSwNCiAgICBzZF9SQVZMVF9BMSA9IHNkKFJBVkxUX0ExLCBuYS5ybSA9IFRSVUUpLA0KICAgIHNkX1JBVkxUX0EyID0gc2QoUkFWTFRfQTIsIG5hLnJtID0gVFJVRSksDQogICAgc2RfUkFWTFRfQTMgPSBzZChSQVZMVF9BMywgbmEucm0gPSBUUlVFKSwNCiAgICBzZF9SQVZMVF9BNCA9IHNkKFJBVkxUX0E0LCBuYS5ybSA9IFRSVUUpLA0KICAgIHNkX1JBVkxUX0E1ID0gc2QoUkFWTFRfQTUsIG5hLnJtID0gVFJVRSkNCiAgKSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IHN0YXJ0c193aXRoKCJtZWRpYV8iKSwgbmFtZXNfdG8gPSAiUkFWTFQiLCB2YWx1ZXNfdG8gPSAibWVkaWEiKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgic2RfIiksIG5hbWVzX3RvID0gInNkX25hbWUiLCB2YWx1ZXNfdG8gPSAic2QiKSAlPiUNCiAgbXV0YXRlKFJBVkxUID0gZ3N1YigibWVkaWFfIiwgIiIsIFJBVkxUKSwNCiAgICAgICAgIHNkX25hbWUgPSBnc3ViKCJzZF8iLCAiIiwgc2RfbmFtZSkpICU+JQ0KICBmaWx0ZXIoUkFWTFQgPT0gc2RfbmFtZSkgJT4lDQogIHNlbGVjdCgtc2RfbmFtZSkNCg0KDQoNCnAgPC0gZ2dwbG90KG1lZGlhc19yYXZsdCwgYWVzKHggPSBmYWl4YV9ldGFyaWEsIHkgPSBtZWRpYSwgZ3JvdXAgPSBpbnRlcmFjdGlvbihHUk9VUCwgUkFWTFQpLCBjb2xvciA9IFJBVkxUKSkgKw0KICBnZW9tX2xpbmUoYWVzKGxpbmV0eXBlID0gR1JPVVApLCBzaXplID0gMSkgKyAgIyBEaWZlcmVuY2lhIG9zIGdydXBvcyBwb3IgdGlwbyBkZSBsaW5oYQ0KICBnZW9tX3BvaW50KHNpemUgPSAyKSArDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBtZWRpYSAtIHNkLCB5bWF4ID0gbWVkaWEgKyBzZCwgZmlsbCA9IFJBVkxUKSwgYWxwaGEgPSAwLjIpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMwMTIwNEUiLCAiIzAyODM5MSIsICIjRkYwMDAwIiwgIiNGRkEyN0YiLCAiI0U1OUJFOSIpKSArICAjIFBhbGV0YSBkZSBjb3JlcyBncmFkaWVudGUgcGFyYSBSQVZMVA0KICBzY2FsZV9saW5ldHlwZV9tYW51YWwodmFsdWVzID0gYygic29saWQiLCAiZGFzaGVkIikpICsgICMgVGlwb3MgZGUgbGluaGEgcGFyYSBvcyBncnVwb3MNCiAgbGFicyh0aXRsZSA9ICJNw6lkaWFzIGRvcyBWYWxvcmVzIFJBVkxUIHBvciBHcnVwbyBlIEZhaXhhIEV0w6FyaWEiLA0KICAgICAgIHggPSAiRmFpeGEgRXTDoXJpYSIsDQogICAgICAgeSA9ICJNw6lkaWEgZG9zIFZhbG9yZXMgUkFWTFQiLA0KICAgICAgIGNvbG9yID0gIlJBVkxUIiwNCiAgICAgICBsaW5ldHlwZSA9ICJHcnVwbyIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCnANCg0KDQojIENyaWFyIG8gZ3LDoWZpY28gZGUgbGluaGEgY29tIHNvbWJyYSBwYXJhIGRlc3ZpbyBwYWRyw6NvIGUgZmFjZXRfd3JhcA0KcCA8LSBnZ3Bsb3QobWVkaWFzX3Jhdmx0LCBhZXMoeCA9IGZhaXhhX2V0YXJpYSwgeSA9IG1lZGlhLCBncm91cCA9IEdST1VQLCBjb2xvciA9IEdST1VQKSkgKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVkaWEgLSBzZCwgeW1heCA9IG1lZGlhICsgc2QsIGZpbGwgPSBHUk9VUCksIGFscGhhID0gMC42KSArDQogIGdlb21fbGluZShhZXMobGluZXR5cGUgPSBHUk9VUCksIHNpemUgPSAxKSArICAjIERpZmVyZW5jaWEgb3MgZ3J1cG9zIHBvciB0aXBvIGRlIGxpbmhhDQogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsNCiAgZmFjZXRfd3JhcCh+IFJBVkxULCBzY2FsZXMgPSAiZnJlZV95IikgKyAgIyBGYWNldGEgcG9yIHZhcmnDoXZlbCBSQVZMVA0KICBzY2FsZV9saW5ldHlwZV9tYW51YWwodmFsdWVzID0gYygic29saWQiLCAiZGFzaGVkIikpICsgICMgVGlwb3MgZGUgbGluaGEgcGFyYSBvcyBncnVwb3MNCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTUpKSArICAjIEFqdXN0YXIgYSBlc2NhbGEgZG8gZWl4byB5DQogIGxhYnModGl0bGUgPSAiTcOpZGlhcyBkb3MgVmFsb3JlcyBSQVZMVCBwb3IgR3J1cG8gZSBGYWl4YSBFdMOhcmlhIiwNCiAgICAgICB4ID0gIkZhaXhhIEV0w6FyaWEiLA0KICAgICAgIHkgPSAiTcOpZGlhIGRvcyBWYWxvcmVzIFJBVkxUIiwNCiAgICAgICBjb2xvciA9ICJHcnVwbyIsDQogICAgICAgZmlsbCA9ICJHcnVwbyIsDQogICAgICAgbGluZXR5cGUgPSAiR3J1cG8iKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQoNCnANCg0KYGBgDQoNCmBgYHtyfQ0KIyBjb21wYXJhbmRvIGRlIDUgZW0gNSANCg0KZGF0YS5yYXZsdCA8LSByZWFkX2V4Y2VsKCJSQVZMVHNfRXNjb3JlWi54bHN4IikNCg0KZGF0YS5yYXZsdCA8LSBkYXRhLnJhdmx0ICU+JSAgc2VsZWN0KCJBR0UiLCJHUk9VUCIsIlJBVkxUX0ExIiwiUkFWTFRfQTIiLCAiUkFWTFRfQTMiLCJSQVZMVF9BNCIsICJSQVZMVF9BNSIpDQogDQoNCmRhdGEucmF2bHQgPC0gZGF0YS5yYXZsdCAlPiUNCiAgbXV0YXRlKA0KICAgIGZhaXhhX2V0YXJpYSA9IGNhc2Vfd2hlbigNCiAgICAgIEFHRSA+PSAxOCAmIEFHRSA8PSAyMCB+ICIxOC0yMCIsDQogICAgICBBR0UgPj0gMjEgJiBBR0UgPD0gMjUgfiAiMjEtMjUiLA0KICAgICAgQUdFID49IDI2ICYgQUdFIDw9IDMwIH4gIjI2LTMwIiwNCiAgICAgIEFHRSA+PSAzMSAmIEFHRSA8PSAzNSB+ICIzMS0zNSIsDQogICAgICBBR0UgPj0gMzYgJiBBR0UgPD0gNDAgfiAiMzYtNDAiLA0KICAgICAgQUdFID49IDQxICYgQUdFIDw9IDQ1IH4gIjQxLTQ1IiwNCiAgICAgIEFHRSA+PSA0NiAmIEFHRSA8PSA1MCB+ICI0Ni01MCINCiAgICApDQogICkNCg0KI21lZGlhc19yYXZsdCA8LSBkYXRhLnJhdmx0ICU+JQ0KIyAgZ3JvdXBfYnkoR1JPVVAsIGZhaXhhX2V0YXJpYSkgJT4lDQojICBzdW1tYXJpc2UoDQojICAgIG1lZGlhX1JBVkxUX0ExID0gbWVhbihSQVZMVF9BMSwgbmEucm0gPSBUUlVFKSwNCiMgICAgbWVkaWFfUkFWTFRfQTIgPSBtZWFuKFJBVkxUX0EyLCBuYS5ybSA9IFRSVUUpLA0KIyAgICBtZWRpYV9SQVZMVF9BMyA9IG1lYW4oUkFWTFRfQTMsIG5hLnJtID0gVFJVRSksDQojICAgIG1lZGlhX1JBVkxUX0E0ID0gbWVhbihSQVZMVF9BNCwgbmEucm0gPSBUUlVFKSwNCiMgICAgbWVkaWFfUkFWTFRfQTUgPSBtZWFuKFJBVkxUX0E1LCBuYS5ybSA9IFRSVUUpDQojICApICU+JQ0KIyAgdW5ncm91cCgpDQoNCiNtZWRpYXNfcmF2bHQNCg0KbWVkaWFzX3Jhdmx0IDwtIGRhdGEucmF2bHQgJT4lDQogIGdyb3VwX2J5KEdST1VQLCBmYWl4YV9ldGFyaWEpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgbWVkaWFfUkFWTFRfQTEgPSBtZWFuKFJBVkxUX0ExLCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0EyID0gbWVhbihSQVZMVF9BMiwgbmEucm0gPSBUUlVFKSwNCiAgICBtZWRpYV9SQVZMVF9BMyA9IG1lYW4oUkFWTFRfQTMsIG5hLnJtID0gVFJVRSksDQogICAgbWVkaWFfUkFWTFRfQTQgPSBtZWFuKFJBVkxUX0E0LCBuYS5ybSA9IFRSVUUpLA0KICAgIG1lZGlhX1JBVkxUX0E1ID0gbWVhbihSQVZMVF9BNSwgbmEucm0gPSBUUlVFKSwNCiAgICBzZF9SQVZMVF9BMSA9IHNkKFJBVkxUX0ExLCBuYS5ybSA9IFRSVUUpLA0KICAgIHNkX1JBVkxUX0EyID0gc2QoUkFWTFRfQTIsIG5hLnJtID0gVFJVRSksDQogICAgc2RfUkFWTFRfQTMgPSBzZChSQVZMVF9BMywgbmEucm0gPSBUUlVFKSwNCiAgICBzZF9SQVZMVF9BNCA9IHNkKFJBVkxUX0E0LCBuYS5ybSA9IFRSVUUpLA0KICAgIHNkX1JBVkxUX0E1ID0gc2QoUkFWTFRfQTUsIG5hLnJtID0gVFJVRSkNCiAgKSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IHN0YXJ0c193aXRoKCJtZWRpYV8iKSwgbmFtZXNfdG8gPSAiUkFWTFQiLCB2YWx1ZXNfdG8gPSAibWVkaWEiKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgic2RfIiksIG5hbWVzX3RvID0gInNkX25hbWUiLCB2YWx1ZXNfdG8gPSAic2QiKSAlPiUNCiAgbXV0YXRlKFJBVkxUID0gZ3N1YigibWVkaWFfIiwgIiIsIFJBVkxUKSwNCiAgICAgICAgIHNkX25hbWUgPSBnc3ViKCJzZF8iLCAiIiwgc2RfbmFtZSkpICU+JQ0KICBmaWx0ZXIoUkFWTFQgPT0gc2RfbmFtZSkgJT4lDQogIHNlbGVjdCgtc2RfbmFtZSkNCg0KDQoNCiMgQ3JpYXIgbyBncsOhZmljbyBkZSBsaW5oYSBjb20gc29tYnJhIHBhcmEgZGVzdmlvIHBhZHLDo28gZSBmYWNldF93cmFwDQpwIDwtIGdncGxvdChtZWRpYXNfcmF2bHQsIGFlcyh4ID0gZmFpeGFfZXRhcmlhLCB5ID0gbWVkaWEsIGdyb3VwID0gR1JPVVAsIGNvbG9yID0gR1JPVVApKSArDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBtZWRpYSAtIHNkLCB5bWF4ID0gbWVkaWEgKyBzZCwgZmlsbCA9IEdST1VQKSwgYWxwaGEgPSAwLjYpICsNCiAgZ2VvbV9saW5lKGFlcyhsaW5ldHlwZSA9IEdST1VQKSwgc2l6ZSA9IDEpICsgICMgRGlmZXJlbmNpYSBvcyBncnVwb3MgcG9yIHRpcG8gZGUgbGluaGENCiAgZ2VvbV9wb2ludChzaXplID0gMikgKw0KICBmYWNldF93cmFwKH4gUkFWTFQsIHNjYWxlcyA9ICJmcmVlX3kiKSArICAjIEZhY2V0YSBwb3IgdmFyacOhdmVsIFJBVkxUDQogIHNjYWxlX2xpbmV0eXBlX21hbnVhbCh2YWx1ZXMgPSBjKCJzb2xpZCIsICJkYXNoZWQiKSkgKyAgIyBUaXBvcyBkZSBsaW5oYSBwYXJhIG9zIGdydXBvcw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxNSkpICsgICMgQWp1c3RhciBhIGVzY2FsYSBkbyBlaXhvIHkNCiAgbGFicyh0aXRsZSA9ICJNw6lkaWFzIGRvcyBWYWxvcmVzIFJBVkxUIHBvciBHcnVwbyBlIEZhaXhhIEV0w6FyaWEiLA0KICAgICAgIHggPSAiRmFpeGEgRXTDoXJpYSIsDQogICAgICAgeSA9ICJNw6lkaWEgZG9zIFZhbG9yZXMgUkFWTFQiLA0KICAgICAgIGNvbG9yID0gIkdydXBvIiwNCiAgICAgICBmaWxsID0gIkdydXBvIiwNCiAgICAgICBsaW5ldHlwZSA9ICJHcnVwbyIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCnANCg0KDQpgYGANCg0KDQo=